我有两个排序集: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)发生更改。如此一来,排序和结构位置就被破坏了。对于树结构,树的某些部分变得不可访问,因为假定左子树小于节点的键,而右子树的节点应该大于节点的键。
添加回答
举报
0/150
提交
取消
