【问题标题】:Java TreeMap containsKey invariably returning true?Java TreeMap containsKey总是返回true?
【发布时间】:2009-12-02 04:55:17
【问题描述】:

我正在编写一个使用 TreeMap 接口的 Java 程序,但我遇到了 containsKey 的问题。即使我给 containsKey 一些我确定不在 TreeMap 中的东西,它也会返回 true。

这可能是什么原因?

非常感谢。

--

编辑:我正在编写一个程序来计算文本文件中单词的出现次数。单词被解析,每个单词都是一个类的新实例。在这些类中,equals 和 hashCode 方法被覆盖,因为即使它们是不同的对象,它们也需要被视为相等。

“文本”字段是一个包含单词文本的字符串。

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;
   }
} 

【问题讨论】:

  • 你能发布一些示例代码吗?
  • 你的 compareTo 实现呢?
  • 嗯...嗯,看起来还可以(尽管返回 this.text.compareTo(temp.text)) 会更简单) - 你有一个简短但完整的程序来证明它失败?
  • TreeMap 实际上并不使用equals() 或hashCode()。它专门使用 compareTo()。

标签: java treemap containskey


【解决方案1】:

我的猜测是您使用的密钥类型对 equals 的实现不正确(也可能是 hashCode),或者比较器与 equals 不一致。我想不出任何其他原因。

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

【讨论】:

    猜你喜欢
    • 2021-08-01
    • 2023-04-07
    • 2012-11-15
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 2017-05-10
    相关资源
    最近更新 更多