HashMap 的默認容量是16加載因子是0.75,這個16是指底層陣列的容量還是指添加元素的個數,如果是指添加的元素的個數那么底層陣列的容量是怎么確定的?具體是什么時候開始擴容,是添加到12個元素就開始擴容還是陣列的容量到了0.75開始擴容?
uj5u.com熱心網友回復:
默認容量其實就是最大容量,16是基數,每次擴容都增加16容量。 容量是size的話,最大容量就是maxsize,當size/maxsize 大于等于0.75就開始擴容。
uj5u.com熱心網友回復:
這個16是指底層陣列的容量,不是元素的數量,如果真是元素的數量,那HashMap就會頻繁擴容uj5u.com熱心網友回復:
容量是一個容器最大存盤值,比如一個500ml的水杯,容量就是500ml , hashmap的容量 是根據 DEFAULT_INITIAL_CAPACITY MAXIMUM_CAPACITY 這兩個來確定的,也就是說hashmap不是無限大的,是存在最大值的。
什么時候擴容可以通過查看原始碼來解決的,,put一個元素后,會先判斷是否需要擴容,如果需要擴容,就增加一次容量,所以不是16*0.75=12 第一次擴容的,,是put第13個元素的時候,觸發擴容的
++modCount;
if (++size > threshold)
resize(); //put 的最后階段,判斷是否擴容 13>12所以擴容 12==12不擴容
afterNodeInsertion(evict);
return null;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/238706.html
標籤:Java SE
