我有兩個排序集: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
提交
取消