簡體   English   中英

使用自定義類正確使用Hashtable

[英]Correct use of Hashtable with custom class

這段代碼會產生意外的輸出。

Hashtable<Pair, Integer> results = new Hashtable<Pair, Integer>();
results.put(new Pair(0, 1), 2);
System.out.println("[DBG] " + results.containsKey(new Pair(0, 1)));

輸出為[DBG] false 為什么Hashtable無法注冊此元素? 它是否與我嘗試將Pair傳遞給哈希表的方式有關?

您必須覆蓋Pair類的hashCode()equals(..)以指示具有相同數字的兩個對象相等。 (最好讓IDE為您生成這兩種方法。)

Hashtable使用hashCode()來確定對象的哈希並查找它。 當您創建一個新的Pair實例時, Object的默認哈希實現會生成一個不同的哈希,因此您的Hashtable無法找到該對(在內部成功)

最后 - 使用HashMap而不是Hashtable 它是一個更新,更好的概念實現,並沒有不必要的同步。

它是通過使用new Pair(0,1)創建兩個不同的對象引起的。 所以你有兩個選擇來實現:

第一個是你應該實現hashCode並且等於Pair類的方法。

第二個使用相同的對象,如下所示:

Hashtable<Pair, Integer> results = new Hashtable<Pair, Integer>();
Pair key=new Pair(0, 1)
results.put(key, 2);
System.out.println("[DBG] " + results.containsKey(key));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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