1. 程式人生 > 其它 >StringBuffer、ArrayList、HashMap的初始容量、已經如何擴充的總結

StringBuffer、ArrayList、HashMap的初始容量、已經如何擴充的總結

jdk1.7

StringBuffer:內部實現是一個字元陣列。初始預設大小為16,當然也可以在其構造方法中進行設定。當新新增字元或字串時,發現數組容量不夠。這個時候就需要使用Array.copyOf()方法進行擴充。擴充的新的陣列大小等於,(原始容量*2+2)和(陣列實際字元個數+新增的字元長度)之間的較大值。

jdk1.7

HashMap:內部實現是一個Entry的陣列,預設大小是空的陣列。初始化的容量是16,載入因子是3/4(當陣列元素數量大於總容量的載入因子的時候,擴充陣列)。當預設不是空的陣列時,當達到載入因子的比例的時候,每次擴充初始容量的2倍。

jdk1.6

ArrayList 初始化大小是 10 (如果你知道你的arrayList 會達到多少容量,可以在初始化的時候就指定,能節省擴容的效能開支)
擴容點規則是,新增的時候發現容量不夠用了,就去擴容
擴容大小規則是,擴容後的大小= 原始大小+原始大小/2 + 1。(例如:原始大小是 10 ,擴容後的大小就是 10 + 5+1 = 16)

jdk1.7

ArrayList:內部實現是一個Object的陣列。初始預設大小為0,當然也可以在其構造方法中設定。當新增一個Object時,預設擴充陣列容量為10。然後每次擴充的新的陣列大小等於,(原始容量*3/2)和(陣列的長度+1)之間的較大值。根據每次增加一個Object,可得該情況每次擴充的固定大小為3/2。當初始大小為手動設定的時候,每次擴充的新的陣列大小等於,(原始容量*3/2)和(陣列的長度+1)之間的較大值。