2009-12-01 121 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一致。我想不出任何其他的理由。

如果您可以制作一个简短但完整的程序来演示问题,我们可以证实这一点。