JAVA ArrayList以及HashMap的初始容量以及擴容問題 & JAVA集合類對比總結


一、Java中的ArrayList的初始容量和擴容

ArrayList是經常會被用到的,一般情況下,使用的時候會像這樣進行聲明:
List arrayList = new ArrayList();
如果像上面這樣使用默認的構造方法,初始容量被設置為10。當ArrayList中的元素超過10個以后,會重新分配內存空間,使數組的大小增長到16。
可以通過調試看到動態增長的數量變化:10->16->25->38->58->88->…
比如:
List arrayList = new ArrayList(4);
將ArrayList的默認容量設置為4。當ArrayList中的元素超過4個以后,會重新分配內存空間,使數組的大小增長到7。
可以通過調試看到動態增長的數量變化:4->7->11->17->26->…
那么容量變化的規則是什么呢?請看下面的公式:
((舊容量 * 3) / 2) + 1
一旦容量發生變化,就要帶來額外的內存開銷,和時間上的開銷。
所以,在已經知道容量大小的情況下,推薦使用下面方式進行聲明:
List arrayList = new ArrayList(CAPACITY_SIZE);

二、Java中的HashMap的初始容量和擴容

HashMap初始化時設置已知的大小,如果不超過16個,那么設置成默認大小16:
集合初始化時, 指定集合初始值大小。
說明: HashMap使用HashMap(int initialCapacity)初始化,
正例:initialCapacity = (需要存儲的元素個數 / 負載因子) + 1。注意負載因子(即loader factor)默認為0.75, 如果暫時無法確定初始值大小,請設置為16(即默認值)。
反例:HashMap需要放置1024個元素,由於沒有設置容量初始大小,隨着元素不斷增加,容量7次被迫擴大,resize需要重建hash表,嚴重影響性能。

注:無論是ArrayList和HashMap設置初始容量要結合使用環境而定,不然會占據無用的內存空間。

轉載自:https://blog.csdn.net/pdsuxueyuan/article/details/103167501

 

PS:JAVA集合類對比總結

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM