比较Java中的两组对象

我有两个排序集:sortedSet1(Object ,Object1 , Object2 , Object3 , Object4 )和sortedSet2(Object ,Object1 , Object2 , Object3 , Object4 )。这些对象还有其他包含对象的列表。


我想从内到外比较每个值并捕捉 2 个 sortedSet 之间的任何差异。我不想要确切的区别。我想看看是否有任何变化。我已经尝试过sortedSet1.equals(sortedSet2),但它死了不起作用,如果我在 sortedSet 内更改另一个对象内的值,它不会发现差异。我也试过


if (!sortedSet1.containsAll(sortedSet2)) {

    // do something 

没有运气..我认为答案存在于流中,但我对它们的经验很少..


非常感谢您的帮助。


跃然一笑
浏览 116回答 1
1回答

不负相思意

如果我在 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)发生更改。如此一来,排序和结构位置就被破坏了。对于树结构,树的某些部分变得不可访问,因为假定左子树小于节点的键,而右子树的节点应该大于节点的键。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java