2014-05-20 65 views
0

我試圖解決的問題是試圖從一個列表中刪除「匹配」另一個列表中的數據的數據,其中我將匹配定義爲相等在我已經定義的兩個屬性中。Java - 根據兩個對象的數據子集檢查相等性

假設對象是一個盒子。它具有字符串大小,顏色和字符串所有者。

我說如果他們有相同的大小和相同的顏色,兩個盒子是相等的。請注意,我無法重新定義Box對象,但我想如果需要的話我可以繼承它。

如果我的等於的定義是相同的大小,那麼我會在O(N)中做一個集合。

Set<String> boxSizes = newHashSet(); 
for (Box box : boxList1) { 
    boxSizes.add(box.getSize()); 
} 

for (Box box : boxList2) { 
    if (boxSizes.contains(box.getSize()) { 
    // This is a duplicate 
    } 
} 

我可以效仿用於檢查通過編寫一個小班級,以這種方式來實現equals根據大小和顏色平等此相同的解決方案。然而,這種解決方案似乎誇大了這樣一個簡單的比較。

我也可以從我關心的屬性的某些組合中構造出密鑰,例如,

boxKeys.add(box.getSize() + box.color.toString()); 

這可能會奏效,雖然肯定會有一些邊緣情況。除了感覺錯誤之外,我對這個解決方案沒有任何有力的論據。

那麼,這個操作應該實現什麼樣的解決方案呢?

回答

0

A TreeSet通過使用compareTo()而不是equals()來打破Set合同,以確定對象相等性。您可以使用自定義Comparator來實現您想要的。只需要編寫一個額外的類(並且使compareTo()對於不相等的對象也是合理的)。

相關問題