簡體   English   中英

HashTable 類的包含問題

[英]Containment issues with HashTable class

我有 Hashtable 類的問題。 我有一個類 TmpClass 實現了一個方法 equals。 然后我創建了一個 Hashtable,並且在我的預定義 equals 方法下,兩個 TmpClass 對象是相等的。 然后我將對象作為哈希表中的鍵。 但是當我測試第二個對象是否真的包含在 Hashtable 中時,結果是“false”...

這是我的主要方法。

    public static void main(String[] args){
    Hashtable<TmpClass, Integer> list = new Hashtable<TmpClass, Integer>();
    TmpClass v1 = new TmpClass(1);
    list.put(v1, 1);

    TmpClass v2 = new TmpClass(1);

    if(v2.equals(v1))
        System.out.println("Equals");
    else System.out.println("Not equal");

    if(list.containsKey(v2))
        System.out.println("Contains");
    else System.out.println("Not contain");
}

這是我的 TmpClass。

public class TmpClass {
private int val;

public TmpClass(int v){
    val = v;
}

public boolean equals(Object o){
    if(o instanceof TmpClass){
        return val == ((TmpClass) o).val;
    }
    else return false;
}
}

javadoc里面寫得很清楚,Hashtable的方法containsKey使用Object類的方法equals來比較key。 有人解釋為什么這里不滿足繼承屬性嗎? 或者有人有解決這個問題的替代方法嗎?

這對我很有幫助。 謝謝。

您還必須實現 hashcode 方法,作為hashcode equals contract 的一部分 它也在Hastable 規范中說明

要從哈希表中成功存儲和檢索對象,用作鍵的對象必須實現 hashCode 方法和 equals 方法。

實施equals是不夠的。

為了將您的類用作Map的鍵,您還必須實現hashCode

這是一個例子:

@Override
public int hashCode() {
    return Integer.valueOf(val).hashCode();
}

暫無
暫無

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

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