我的想法已经用完......我正在比较两个对象,它们都有一个自定义类型的数组列表字段。
两个对象在数组列表中都包含一个元素。
当我查看eclipse调试器时,它看起来完全相同,直到最接近的细节,除了不同的id(它看起来像:调试器中的(id = 111))
有趣的是,这个不同的ID在一个字段上,它是Integer(counter)类型。这显然不应该发生,因为整数已经等于并且哈希码已经实现了,对吗?
具有不同ID的另一个字段是字符串(过滤器)
具有这些字段的两个对象之间的equals方法返回false ...我的想法已经用完了...所有equals和hashCode方法都在每个自定义类型中实现..
这是来自eclipse调试器:
对象1:
Object (id=159)
arrayList ArrayList<E> (id=175)
[0] Item (id=175)
counter Integer (id=179)
filter "abcd" (id=181)
count 4
hash -717152022
offset 2
value (id=189)
对象2:
Object (id=259)
arrayList ArrayList<E> (id=267)
[0] Item (id=268)
counter Integer (id=268)
filter "abcd" (id=269)
count 4
hash -717152022
offset 2
value (id=270)
答案 0 :(得分:1)
您如何比较ArrayLists?请发一些代码。
public static void main(String[] args) {
List<String> list1 = new ArrayList<String>();
List<String> list2 = new ArrayList<String>();
list1.add("abcd");
list2.add("abcd");
if (list1.equals(list2)) {
System.out.println("hello");
}
}
打印你好。
那你做什么?
答案 1 :(得分:1)
您可以简单地使用ArrayList超类的equals() implementation:AbstractList。
当且仅当您已覆盖班级equals()
中的Item
方法。
例如:
@Override
public boolean equals(Item item){
if(this.counter.equals(item.counter)
&& this.filter.equals(item.filter)){
// && etc for all Item fields that make the equality
return true;
}
return false;
}
另请注意,您不能依赖hashCode来比较相等性,请参阅此帖子:Is Java hashCode() method a reliable measure of object equality?