0
A
回答
2
我假設你在談論HashMap
。讓我們來看看source:
386 public V put(K key, V value) {
387 if (key == null)
388 return putForNullKey(value);
389 int hash = hash(key.hashCode());
390 int i = indexFor(hash, table.length);
391 for (Entry<K,V> e = table[i]; e != null; e = e.next) {
392 Object k;
393 if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
394 V oldValue = e.value;
395 e.value = value;
396 e.recordAccess(this);
397 return oldValue;
398 }
399 }
400
401 modCount++;
402 addEntry(hash, key, value, i);
403 return null;
404 }
所以這裏發生了什麼就是put()
方法散列鍵和訪問相應的桶。然後,它遍歷條目包含那裏,如果發現其主要equal
S中的給定鍵的條目,它將替換該條目與給定值值,即:
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
如果沒有這樣的條目發現,我們只需添加一個新條目水桶正常,即:
modCount++;
addEntry(hash, key, value, i);
return null;
Entry
是包含鍵值對的類。
1
地圖不允許重複鍵。如果插入了具有相同密鑰的元素,舊值將替換爲新值。
例如:假設我的地圖如下:
Key Value Bucket
A Val1 1
B Val2 2
C Val3 1
坎結構:
Bucket 1 : A -> C
Bucket 2 : B
當有人試圖進入另一元件(C,VAL6)其中C是鍵;那麼在插入之後地圖結構將如下:
Key Value Bucket
A Val1 1
B Val2 2
C Val6 1
因此,值在地圖中被替換。
坎結構:
Bucket 1 : A -> C
Bucket 2 : B
我們解決你問題的第二部分:當具有相同值的不同關鍵在同一個桶進入它只是增加桶(內部每個桶可能是就像一個ArrayList,其中元素添加在列表的末尾)。
例如:讓我們假設我們正在加入以下對(d,纈氨酸7)上述地圖和假設密鑰d映射到桶1。然後在地圖上結構將在插入之後,如下所示:
Key Value Bucket
A Val1 1
B Val2 2
C Val6 1
D Val7 1
坎結構:
Bucket 1 : A -> C -> D
Bucket 2 : B
0
當重複鍵輸入,它只是替換爲新的值前一個鍵的值。當一個不同的鍵被輸入到同一個桶中時,它首先檢查它是否是重複的,如果不是,那麼它將添加該鍵並且它是相應的值。
0
A HashMap
「bucket」是一個鏈表。列表中的每個元素都包含鍵,值,鍵的散列和指向列表中下一個元素的指針。
所以,當發生散列衝突時,散列表將迭代桶中的每個條目。它將輸入哈希與插入密鑰哈希以及輸入密鑰的輸入密鑰進行比較。如果他們都是平等的,它會取代價值。如果它通過整個存儲桶而沒有匹配,則會向存儲桶中添加條目。
相關問題
- 1. Django重複輸入密鑰
- 2. 地圖輸入密鑰提交,而不在輸入內
- 3. 導入時重複輸入密鑰
- 4. IntegrityError:(1062,重複輸入密鑰)
- 5. MySQL:密鑰2的重複輸入
- 6. 1062重複輸入密鑰UNQ_MAGE_CATALOGINVENTORY_STOCK_ITEM_PRODUCT_ID_STOCK_ID
- 7. 如何在地圖上交換密鑰?
- 8. 處理AVL樹內的重複密鑰
- 9. MySQL插入IGNORE /在重複密鑰更新不檢測重複
- 10. 輸入密鑰在textarea
- 11. 在KeyDown中輸入密鑰
- 12. JTable輸入密鑰
- 13. 加密輸入的密鑰
- 14. 爲密鑰輸入密碼
- 15. 密鑰重複延遲和密鑰重複率
- 16. 「重複密鑰」 - 插入db時出錯
- 17. 調整插入重複密鑰更新
- 18. web2py插入重複密鑰更新
- 19. 增量更新插入...重複密鑰
- 20. 無法插入重複密鑰SQL
- 21. 插入...重複密鑰更新(PHP:PDO)
- 22. sqlexception無法插入重複密鑰行
- 23. 重現Windows產品密鑰輸入
- 24. jQuery在輸入密鑰已被禁用時,輸入密鑰已被命中後禁用輸入密鑰
- 25. 如何檢測鍵盤輸入密鑰?
- 26. 如何啓用輸入密鑰提交?
- 27. 地圖API密鑰
- 28. 查找地圖內的密鑰
- 29. 如何在忘記密鑰庫後恢復密鑰庫密碼
- 30. 如何谷歌地圖API密鑰
那麼它的基本檢查關鍵等價?如果不同的鍵具有相同的值,它會創建一個新的條目對象。但是,在哪裏使用equals方法。我無法在代碼 – hitesh
中看到它處於條件'((k = e.key)== key || key.equals k))的'。 –