源代碼查看,有三個常量, 數組
static final int DEFAULT_INITIAL_CAPACITY = 16; 性能
static final int MAXIMUM_CAPACITY = 1 << 30; spa
static final float DEFAULT_LOAD_FACTOR = 0.75f; hash
三個常量中能夠看出,默認的容器大小是16,最大長度是2的30次方,load factor默認是0.75,擴充的臨界值是16*0.75=12 容器
當咱們往HashMap中put元素的時候,先根據key的hashCode從新計算hash值,根據hash值獲得這個元素在數組中的位置(即下標),若是數組該位置上已經存放有其餘元素了,那麼在這個位置上的元素將以鏈表的形式存放,新加入的放在鏈頭,最早加入的放在鏈尾。若是數組該位置上沒有元素,就直接將該元素放到此數組中的該位置上。 hashmap
那麼hashmap何時進行擴容呢?當hashmap中的元素個數超過數組大小*loadFactor時,就會進行數組擴容,loadFactor的默認值爲0.75,也就是說,默認狀況下,數組大小爲16,那麼當hashmap中元素個數超過16*0.75=12的時候,就把數組的大小擴展爲2*16=32,即擴大一倍,而後從新計算每一個元素在數組中的位置,而這是一個很是消耗性能的操做,因此若是咱們已經預知hashmap中元素的個數,那麼預設元素的個數可以有效的提升hashmap的性能。 擴展