检查类的ArrayList是否有重复项

时间:2013-02-21 17:26:07

标签: java arraylist

我有一个保存信息的类的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);
                }

4 个答案:

答案 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