2013-02-21 35 views
1

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

考虑使用'Map' – 2013-02-21 18:13:10

回答

1

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

重写hashCode()也是一种很好的做法。阅读更多关于Object的Javadocs。

4

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

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

您还需要重写等于在你的类,以便设置知道,如果两个对象相等

忽略equals的

例子可以在这里找到:How to override equals method in java

+0

这是最好的解决方案 – user1428716 2013-02-21 17:35:23

+0

我在我的Info类中覆盖了equals,但是当我在代码中放置一个断点时它永远不会被调用。我编辑我的问题,包括更多的代码与我的电话和我的覆盖 – tyczj 2013-02-21 18:27:35

+0

...也重写hashCode()时使用HashSet – keuleJ 2013-02-21 20:35:51

1

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

0

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