我在Java中有两组比较Item
对象。是否有方法比较这些集合,以便调用Item
的equals
方法,而不仅仅是比较引用?Java中的深度比较集
9
A
回答
9
AbstractSet
的每个孩子都这样做。见the docs
public boolean equals(Object o)
比较指定对象与此set的相等。如果给定对象也是一个集合,则返回true,这两个集合具有相同的大小,并且给定集合中的每个成员都包含在此集合中。这确保了equals方法在Set接口的不同实现中正常工作。 这个实现首先检查指定的对象是否是这个集合;如果是的话,它返回true。然后,它检查指定的对象是否与其集合的大小相同;如果不是,则返回false。如果是这样,它返回containsAll((Collection)o)。
所以实际上这依赖于contains
实现(由containsAll(..)
调用)。对于HashSet
(至少)这是你正在寻找。
4
这是默认行为,如果它不是你所看到的,那么检查你是否重写了hashCode。参见下面的代码中的示例:
public static void main(String[] args) {
Set<Item> items1 = new HashSet<Item>();
items1.add(new Item("item 1"));
items1.add(new Item("item 2"));
Set<Item> items2 = new HashSet<Item>();
items2.add(new Item("item 1"));
items2.add(new Item("item 2"));
System.out.println(items1.equals(items2));
}
private static class Item {
private String id;
public Item(String id) {
this.id = id;
}
@Override
public int hashCode() {
return id.hashCode();
}
@Override
public boolean equals(Object obj) {
return id.equals(((Item)obj).id);
}
}
此输出:
真
相关问题
- 1. 深度对象比较Delphi
- 2. “深度比较”字典
- 3. yui深度比较数组
- 4. Python深度列表比较
- 5. 比较Kinect的深度到OpenGL的深度有效
- 6. 错误:最大递归深度比较
- 7. ScalaTest深度比较最佳实践
- 8. 深入比较并获得角度值
- 9. 深度反射比较等于
- 10. 模糊深度对象比较
- 11. 比较两个对象与深度比较或与json.stringify?
- 12. Java中的比较器集等于
- 13. 比较2套Java集合
- 14. 如何向深度缓冲区写入与深度比较值不同的值?
- 15. 使用运算符时std :: set中unique_ptr的深度比较==
- 16. 在Ruby中比较深度嵌套的哈希阵列
- 17. 在java中比较结果集
- 18. Groovy:在Unitils assertReflectionEquals中深入比较没有equals()的Java bean?
- 19. Linq Group深入比较
- 20. Java的Java中多比较
- 21. 在Python中比较超出最大递归深度?
- 22. 比较集合中的值
- 23. Python:用于比较不同深度的字符对的工具?
- 24. 比较的Java
- 25. 比较的集合
- 26. 两个对象之间的部分深度比较
- 27. 用于深度属性比较的表达式构建器
- 28. 超过最大递归深度的比较?
- 29. 嵌套集合的深度
- 30. 深度复制Java中
由于@MrWiggles。重写hashCode解决了我的问题(重写hashCode和equals中的任何一个都不起作用)。 – user495285 2014-02-26 16:03:30