我試圖解決的問題是試圖從一個列表中刪除「匹配」另一個列表中的數據的數據,其中我將匹配定義爲相等在我已經定義的兩個屬性中。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());
這可能會奏效,雖然肯定會有一些邊緣情況。除了感覺錯誤之外,我對這個解決方案沒有任何有力的論據。
那麼,這個操作應該實現什麼樣的解決方案呢?