Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList和HashMap的容量增长差异_Java_Arraylist_Hashmap - Fatal编程技术网

Java ArrayList和HashMap的容量增长差异

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调

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

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中重新排列元素


要获得更好的解释,请查看。

以数组为基础的列表和以哈希表为基础的映射之间是否有任何区别?是的,确实有,而且有很多相似之处,所以比较容易计算相似之处而不是不同之处。