我有两个排序集:sortedSet1(Object ,Object1 , Object2 , Object3 , Object4 )
和sortedSet2(Object ,Object1 , Object2 , Object3 , Object4 )
。对象具有其他列表,其中包含对象。
我想从里到外比较每个值,并捕获2个sortedSets之间的任何差异。我不想要确切的区别。我想知道是否有任何变化。我已经尝试了sortedSet1.equals(sortedSet2)
,但它死了不起作用,如果我在sortedSet中的另一个对象内部更改一个值,它没有捕捉到差异。我也试过了
if (!sortedSet1.containsAll(sortedSet2)) {
// do something
}
没有运气..我认为答案存在于溪流中,但我对它们的经验很少..
非常感谢您的帮助。
如果我在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)发生更改。那时订购和结构位置已损坏。对于树结构,树的部分变得不可访问,因为假设左子树小于节点的密钥,并且右子树应该具有大于节点密钥的节点。