为了账号安全,请及时绑定邮箱和手机立即绑定

比较Java中的两组对象

比较Java中的两组对象

跃然一笑 2022-07-20 16:47:12
我有两个排序集:sortedSet1(Object ,Object1 , Object2 , Object3 , Object4 )和sortedSet2(Object ,Object1 , Object2 , Object3 , Object4 )。这些对象还有其他包含对象的列表。我想从内到外比较每个值并捕捉 2 个 sortedSet 之间的任何差异。我不想要确切的区别。我想看看是否有任何变化。我已经尝试过sortedSet1.equals(sortedSet2),但它死了不起作用,如果我在 sortedSet 内更改另一个对象内的值,它不会发现差异。我也试过if (!sortedSet1.containsAll(sortedSet2)) {    // do something } 没有运气..我认为答案存在于流中,但我对它们的经验很少..非常感谢您的帮助。
查看完整描述

1 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

如果我在 sortedSet 内更改另一个对象内的值,它不会发现差异


首先要找到差异是这样的:


SortedSet<Object> common = new TreeSet<>(sortedSet1);

common.retainAll(sortedSet2);

SortedSet<Object> all = new TreeSet<>(sortedSet1);

all.addAll(sortedSet2);

SortedSet<Object> differences = new TreeSet<>(all);

differences.removeAll(common);

但是,您提到一旦在集合中更改对象,就会敲响警钟。


永远不应该更改一个值,以使其使用的键(hashCode 或此处为 Comparable)发生更改。如此一来,排序和结构位置就被破坏了。对于树结构,树的某些部分变得不可访问,因为假定左子树小于节点的键,而右子树的节点应该大于节点的键。


查看完整回答
反对 回复 2022-07-20
  • 1 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号