簡體   English   中英

比較Java中的兩組對象

[英]Compare two sets of Objects in 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 
} 

運氣不好..我認為答案存在於流中,但是我對它們的經驗很少。

非常感謝您的幫助。

如果我在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)更改。 這樣一來,排序和結構位置就被破壞了。 對於樹結構,由於假定左子樹小於節點的鍵,所以樹的部分變得不可訪問,而右子樹的節點應大於節點的鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM