[英]Deep compare sets in Java
我在Java中有兩個比較Item
對象的集合。 有沒有一種比較集合的方法,以便調用Item
的equals
方法,而不僅僅是比較引用?
AbstractSet
每個子AbstractSet
這樣做的。 查看文檔
public boolean equals(Object o)
將指定對象與此set進行相等性比較。 如果給定對象也是一個集合,則返回true,兩個集合具有相同的大小,並且給定集合的每個成員都包含在此集合中。 這可確保equals方法在Set接口的不同實現中正常工作。 此實現首先檢查指定的對象是否為此set; 如果是這樣,它返回true。 然后,它檢查指定的對象是否是一個大小與該集合的大小相同的集合; 如果沒有,則返回false。 如果是,則返回containsAll((Collection)o)。
所以實際上這依賴於contains
實現(由containsAll(..)
調用)。 對於HashSet
(至少),這是你正在尋找的。
這是默認行為,如果它不是您所看到的,那么檢查您是否也重寫了hashCode。 有關示例,請參閱以下代碼:
public static void main(String[] args) {
Set<Item> items1 = new HashSet<Item>();
items1.add(new Item("item 1"));
items1.add(new Item("item 2"));
Set<Item> items2 = new HashSet<Item>();
items2.add(new Item("item 1"));
items2.add(new Item("item 2"));
System.out.println(items1.equals(items2));
}
private static class Item {
private String id;
public Item(String id) {
this.id = id;
}
@Override
public int hashCode() {
return id.hashCode();
}
@Override
public boolean equals(Object obj) {
return id.equals(((Item)obj).id);
}
}
這輸出:
真正
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.