2009-12-01 119 views
0

我正在編寫一個使用TreeMap接口的Java程序,並且我對containsKey有問題。即使當我給出containsKey時,它也會返回true,但我知道肯定不在TreeMap中。Java TreeMap containsKey總是返回true?

這可能是什麼原因造成的?

非常感謝。

-

編輯:我寫計數的單詞出現在文本文件中的程序。單詞被解析,每個單詞都是一個類的新實例。在這些類中,equals和hashCode方法被覆蓋,因爲即使它們是不同的對象,也需要將它們視爲等號。

字段「text」包含單詞文本的字符串。

public boolean equals(Object obj){ 
    Word temp = ((Word)obj); 
    return this.text.equals(temp.text); 
} 

public int hashCode(){ 
    return this.text.hashCode(); 
} 

public int compareTo (Object x) { 
    Word temp = ((Word)x); 

    if(this.text.compareTo(temp.text) < 0){ 
     return -1; 
    } 
    else if (this.text.equals(temp.text)){ 
     return 0; 
    } 
    else { 
     return 1; 
    } 
} 
+0

你可以發佈一些示例代碼? – 2009-12-01 20:35:36

+0

和你的compareTo實現? – 2009-12-01 20:46:35

+0

嗯......好吧,那*看起來很好(雖然只是返回this.text.compareTo(temp.text))會更簡單) - 你有一個簡短但完整的程序來證明它失敗嗎? – 2009-12-01 21:25:14

回答

3

我的猜測是,你正在使用的有一個不正確實施equals(大概hashCode太)一鍵式,或者說比較不符合equals一致。我想不出任何其他的理由。

如果您可以製作一個簡短但完整的程序來演示問題,我們可以證實這一點。