关于这部分,HashMap在两个可能改变其容量的地方都做了兼容处理,分别是指定容量初始化时以及扩容时。 指定容量初始化 当我们通过HashMap(int initialCapacity)设置初始容量的时候,HashMap并不一定会直接采用我们传入的数值,而是经过计算,得到一个新值,目的是提高hash的效率。(1->1、3->4、7->8、9->16) 在JDK ...
5、默认情况下 HashMap 的容量是 16,但是,如果用户通过构造函数指定了一个数字作为容量, 那么Hash 会选择大于该数字的第一个 2 的幂作为容量。 在初始化 HashMap 的时候,应该尽量指定其大小。尤其是当你已知 map 中存放的元素个数时。(《阿里巴巴 Java 开发规约》) HashMap 的扩容条件就是当 HashMap 中的元...
通常,选择16作为默认值,不仅减少哈希碰撞,也提升了效率,这是HashMap采用2的n次方,且默认值为16的原因。而ArrayList的初始化容量为何设定为10?答案其实颇为“直觉”,10是一个平衡内存使用与性能损失的“感觉”值。在不考虑算法优化的前提下,ArrayList的容量应是任何正值,而选择10作为默认值,可能...