簡體   English   中英

檢查類的ArrayList是否重復

[英]Checking a ArrayList of a class for duplicates

我有一個包含信息的類的ArrayList ,並且我想添加到此列表中的對象。 我想檢查一下該列表是否已經包含一個數字,然后再將其添加到列表中。

通常,如果只是一個字符串列表,我會做這樣的事情

if(!list.contains("this string")){
    list.add("this string");
}

但是由於這是一個類,因此每個索引具有多個變量。

類世界的一個例子是:

private class From{
    private long threadID;
    private long date;
    private String address;
    private String body;
    private int type;
    private long id;

    @Override
    public boolean equals(Object obj){
        if(obj != null){
            if(getClass() != obj.getClass()){
                return false;
            }else{
                final From from = (From)obj;
                if((this.address != null) ? (from.address != null) : !this.address.equals(from.address)){
                    return false;
                }
            }
        }else{
            return false;
        }
        return true;
    }
}

我想查看是否已經有一個具有相同編號的條目,所以我是否必須手動遍歷每個索引並進行檢查,或者是否有一種更簡單的方式來做我想做的事情?

編輯:

我怎么稱呼它

HashSet<From> addresses = new HashSet<From>();
From f = new From();
                f.setAddress(messages.getString(3));
                f.setBody(messages.getString(0));
                f.setDate(messages.getLong(2));
                f.setThreadId(messages.getLong(1));
                f.setType(1);
                if(!addresses.contains(f.address)){
                    addresses.add(f);
                }

使用集合而不是列表。 集不允許重復

http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html

您還需要重寫類中的equals,以便Set知道兩個對象是否相等

覆蓋相等的示例可以在這里找到: 如何在Java中覆蓋equals方法

為此,您必須重寫equals(Object o) 在這里,您需要定義將定義兩個對象之間相等性的邏輯。

最好也重寫hashCode() 在Javadocs for Object了解更多信息。

另一種方法是override equals() Info對象的override equals() ,以便兩個Info對象具有相同的編號,則它們相等。 在將元素添加到列表之前,只需執行equals()test。

您仍然可以使用contains方法; List使用equals方法確定列表中是否存在該項目。 但是您必須在Info對象中覆蓋equals

暫無
暫無

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

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