1

我有一个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

4 回答 4

4

使用 Set 而不是 List。集不允许重复

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

您还需要在您的类中覆盖 equals 以便 Set 知道两个对象是否相等

可以在此处找到覆盖 equals 的示例:How to override equals method in java

于 2013-02-21T17:28:16.727 回答
1

您必须为此覆盖equals(Object o)。这是您需要定义定义两个对象之间相等性的逻辑的地方。

重写也是一个好习惯hashCode()。阅读更多关于Object.

于 2013-02-21T17:27:44.440 回答
1

另一种方法是override equals()对于Info对象,如果两个 Info 对象具有相同的编号,则它们是相等的。在将元素添加到列表之前,只需执行 equals() 测试。

于 2013-02-21T17:28:28.617 回答
0

您仍然可以使用该contains方法;AList使用该equals方法来确定该项目是否存在于列表中。但是你必须equals在你的Info对象中覆盖。

于 2013-02-21T17:30:44.257 回答