簡體   English   中英

HashMap put方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM