for(Context context : contexts) {
if(context.equals(c)){
System.out.println(context.equals(c)+" : "+contexts.contains(c));
}
}
上下文是标准的Java TreeSet
对我来说,似乎如果这产生任何输出,它应该产生“true:true”。奇怪的是,它总是以“true:false”回归。
查看文档;我本质上正在复制.contains函数的功能,但却得到了不同的结果。
任何人都能解释一下吗?
编辑:来自java文档(Collection):
如果此collection包含指定的元素,则返回true。更正式地,当且仅当此集合包含至少一个元素e时才返回true(o == null?e == null:o.equals(e))。
答案 0 :(得分:2)
hashcode
实施似乎与equals
不相符。
contains
方法会找到对象 使用hashcode
的位置。然后,它会使用equals
检查是否。
我建议如果你得到true:false
,那么你需要修复你的hashcode
实施,以便
如果equals
为两个对象返回true
,则两个对象上的hashcode
将返回相同的值。
使用TreeSet
使用compareTo
定位 对象所在的位置,并在那里进行等效。