![](/img/trans.png)
[英]Differences between Java 6 and Java 7 in ArrayList capacity growth
[英]Difference between capacity growth of ArrayList and HashMap
在ArrayList中,它基本上使用grow方法增長到新的大小:
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
需要通過首先重新計算它們的所有哈希值來決定將它們放入哪個存儲桶中來轉移實體。這是必需的,因為索引取決於基礎數組的大小。 這就是為什么您不能簡單地將Arrays.copyOf
或System.arraycopy
與HashMap
一起使用。
請注意, HashMap
中的每個Entry
為該操作緩存其哈希值。
哈希圖的工作方式與普通數組完全不同。 主要目的是您可以直接訪問哈希圖中的任何對象,而不必遍歷所有元素。 這是通過計算“哈希值”來完成的,該“哈希值”的作用類似於映射到地圖的直接索引(對地圖的大小取模)。 僅當該位置已被占用時,才會采取其他措施,
如果增加哈希圖的大小,則必須在哈希圖中重新排列元素。
要獲得更好的解釋,請查看Wikipedia文章 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.