HashMap是Map的一个Hash表类型的实现,由于Hash表的常数时间内的寻址特性,使得HashMap可以在常数的时间内执行get(key), set(key, value)方法。HashMap支持存储key和value为null的元素。
HashMap有两个非常重要的初始化参数:initial capacity和load factor。initial capacity决定了存储hash(key)的返回值的bucket。因为HashMap是使用了数组加链表的形式进行元素的存储的(1.8之后增加了红黑树的支持,当链表长度大于8之后,会将链表进行树化)。
load factor是另一个重要的指标,它标示了这个HashMap什么时候需要扩容,默认值是0.75.举个例子,假如初始容量为100,则当hash(key)的返回值达到75个的时候,该HashMap需要扩容,并rehash,扩容后的大小是扩容前的两倍。load factor只和填充的bucket有关,而和该bucket对应的存储了多少个Node无关,即使该bucket只存了一个,也会将填充数+1。因此,如过initial capacity * load facotr > entry数量,则HashMap不会进行rehash。因此,如果预先知道entry的数量,计算相应的capacity值,有利于提高存取效率。
Read full article from HashMap1.8源码解读 | 记忆碎片
No comments:
Post a Comment