HashMap的扩容机制

源代码查看,有三个常量, 数组

 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,最大长度是230次方,load factor默认是0.75,扩充的临界值是16*0.75=12 容器

当咱们往HashMapput元素的时候,先根据keyhashCode从新计算hash值,根据hash值获得这个元素在数组中的位置(即下标),若是数组该位置上已经存放有其余元素了,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最早加入的放在链尾。若是数组该位置上没有元素,就直接将该元素放到此数组中的该位置上。 hashmap

 

那么hashmap何时进行扩容呢?当hashmap中的元素个数超过数组大小*loadFactor时,就会进行数组扩容,loadFactor的默认值为0.75,也就是说,默认状况下,数组大小为16,那么当hashmap中元素个数超过16*0.75=12的时候,就把数组的大小扩展为2*16=32,即扩大一倍,而后从新计算每一个元素在数组中的位置,而这是一个很是消耗性能的操做,因此若是咱们已经预知hashmap中元素的个数,那么预设元素的个数可以有效的提升hashmap的性能。 扩展

相关文章
相关标签/搜索