[英]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.