Java ArrayList和HashMap的容量增长差异
在ArrayList中,它基本上使用增长方法增长到新的大小:Java ArrayList和HashMap的容量增长差异,java,arraylist,hashmap,Java,Arraylist,Hashmap,在ArrayList中,它基本上使用增长方法增长到新的大小: private void grow(int minCapacity) { ... ... elementData = Arrays.copyOf(elementData, newCapacity); } 在HashMap中,它说它将内容重新灰化到一个新数组: Entry[] newTable = new Entry[newCapacity]; ... transfer(...) 在arraylist中,Arrays.copyOf调
private void grow(int minCapacity) {
...
...
elementData = Arrays.copyOf(elementData, newCapacity);
}
在HashMap中,它说它将内容重新灰化到一个新数组:
Entry[] newTable = new Entry[newCapacity];
...
transfer(...)
在arraylist中,Arrays.copyOf调用System.arraycopy。在HashMap中,它使用while循环将所有元素传输到新数组中。当这两个集合最终都创建了一个新数组时,这两个集合之间有什么特殊的区别吗?HashMap需要通过首先重新计算实体的所有哈希值来传输实体,以决定将它们放入哪个bucket中。这是必要的,因为索引取决于基础数组的大小。这就是为什么不能简单地将Arrays.copyOf或System.arraycopy与HashMap一起使用
请注意,HashMap中的每个条目都会为该操作缓存其哈希值。HashMap的工作原理与普通数组完全不同。主要目的是您可以直接访问hashmap中的任何对象,而无需迭代所有元素。 这是通过计算一个散列值来实现的,该散列值的作用有点像直接索引到映射中,以映射的大小为模。只有在已经采取该时段时,才会采取其他措施 如果增加hashmap的大小,则必须在hashmap中重新排列元素
要获得更好的解释,请查看。以数组为基础的列表和以哈希表为基础的映射之间是否有任何区别?是的,确实有,而且有很多相似之处,所以比较容易计算相似之处而不是不同之处。