ArrayList和HashMap的容量增长之间的差异

Mer*_*ary 0 java arraylist hashmap

在ArrayList中,它使用grow方法基本上增长到一个新的大小:

private void grow(int minCapacity) {
...
...
elementData = Arrays.copyOf(elementData, newCapacity);
}
Run Code Online (Sandbox Code Playgroud)

在HashMap中,它说它将内容重新组合到一个新数组:

Entry[] newTable = new Entry[newCapacity];
...
transfer(...)
Run Code Online (Sandbox Code Playgroud)

在arraylist,Arrays.copyOf电话System.arraycopy.在HashMap中,它使用while循环将所有元素传输到新数组.这两个集合之间是否存在任何特殊差异,因为它们最终都会创建一个新数组?

Sot*_*lis 6

HashMap需求由第一重新计算他们所有的哈希值来决定把他们在这桶转移的实体.这是必要的,因为指数依赖于底层数组的大小.这就是为什么你不能简单地使用Arrays.copyOfSystem.arraycopy使用HashMap.

需要注意的是每一个EntryHashMap其散列的正是这个操作的缓存值.