簡體   English   中英

Java中的深度比較集

[英]Deep compare sets in Java

我在Java中有兩個比較Item對象的集合。 有沒有一種比較集合的方法,以便調用Itemequals方法,而不僅僅是比較引用?

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.

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