[英]HashMap put method
在Java中使用.put(Integer, String)
時遇到一些麻煩。 據我了解,當發生沖突時, HashMap
詢問to
值是否與.equals(Object)
相同,如果不是,則將這兩個值存儲在LinkedList
。 不過, size()
為1,而散列迭代器僅顯示一個結果,即最后一個結果。
除此之外,java HashMap
API指出:put
public V put(K key, V value)
將指定值與該映射中的指定鍵相關聯。 如果該映射先前包含該鍵的映射,則將替換舊值。
這不是我所閱讀的所有內容。
思考?
public class HashProblema {
public static void main(String[] args) {
HashMap<Integer, String> hash= new HashMap();
hash.put(1, "sdaaaar");
hash.put(1, "bjbh");
System.out.println(hash.size());
for (Object value : hash.values()) {
System.out.println(value);
}
}
}
輸出為-:
1
bjbh
由於鍵的映射存在,因此將其替換並且大小僅保留為1。
值被新鍵覆蓋。大小保持不變,並且值被更改。這就是它的工作原理,因為鍵值始終是唯一的。您不能在一個鍵上映射多個值。
該API是權威參考,這是您必須相信的。
當HashMap中已經存在鍵的哈希時,就會發生沖突。 然后比較鍵的值,如果鍵的值不同,則將條目放置在鏈接列表中。 如果鍵相同,則HashMap中的舊鍵值將被覆蓋。
API文檔通常應視為權威文檔,除非有充分的理由懷疑其准確性。
您幾乎應該肯定會忽略任何沒有與文檔矛盾地標榜自己為“明知”的主張,並提供可驗證的證據。
我謙虛地建議您可能對鏈接的“沖突”列表的作用感到困惑。 碰巧的是,Java中的HashMap
使用鏈接列表來存儲多個值,對於這些值,鍵的哈希碼與一個或多個其他鍵放在同一“存儲桶”中。
Java中的HashMap將始終存儲鍵值對。 沒有涉及的鏈表。 您所描述的是哈希映射的一般概念(通常在計算機科學課上講授),但是Java中的實現是不同的。 在這里,每個鍵始終只有一個值(放在該位置的最后一個)。
但是,您可以自由定義包含List對象的HashMap。 但是,您必須自己跟蹤重復和碰撞
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.