我有一个保存信息的类的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);
}
答案 0 :(得分:4)
使用Set而不是List。设置不允许重复
http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html
您还需要在类中重写equals,以便Set知道两个对象是否相等
可以在此处找到覆盖等于的示例:How to override equals method in java
答案 1 :(得分:1)
您必须为此重写equals(Object o)
。在这里您需要定义定义两个对象之间相等性的逻辑。
优良作法也是覆盖hashCode()
。阅读Javadocs中的Object
。
答案 2 :(得分:1)
对于信息对象,另一种方式是override equals()
,如果它们都具有相同的数字,则两个Info对象相等。在将元素添加到列表之前,只需执行equals()测试。
答案 3 :(得分:0)
您仍然可以使用contains
方法; List
使用equals
方法确定该项是否存在于列表中。但您必须覆盖equals
对象中的Info
。