如何检查或比较对象是否在数组列表中?

时间:2014-08-26 07:01:35

标签: java search arraylist

我创建了一个像这样的pojo类: -

public class User{
    private int id;
    private String name;

    // Setter and getter methods
}

现在我已经创建了数组并在数组中添加了一些用户:

 List<User> users=new Arraylist<>();

 User user1=new User();
 user1.setId(1);
 user1.setName("ABC");
 users.add(user1);

 User user2=new User();
 user2.setId(2);
 user2.setName("MNO");
 users.add(user2);

 //...

现在我想找到用户1在用户列表中。如果用户的规模很大,那么我该如何进行快速搜索呢?

4 个答案:

答案 0 :(得分:1)

List#contains()方法做你想要的。该方法使用equals()方法来确定两个对象是否相同。因此,只需覆盖equals()并覆盖hashCode()

如果您想通过ID快速搜索它们,我宁愿选择HashMap<Integer,User>而不是List

答案 1 :(得分:0)

如果您想执行快速搜索,可以使用Set(或Map如果要跟踪重复项的数量)来存储数据,您还需要实现{ {3}}和hashCode() - 并使用equals()或使用HashSet并提供TreeSet

另一个解决方案是维护列表排序(关于某些Comparator)并使用Comparator

答案 2 :(得分:0)

users.indexOf(user1);

如果返回-1,则ArrayList中不存在user1。我相信这是了解List上是否存在用户对象的最简单方法。

你可以有这样的条件:

boolean userExists = (users.indexOf(aUserObject) >= 0) ? true : false;

答案 3 :(得分:0)

您必须按如下方式实施equals()hascode()

class User{
private int id;
private String name;

// Setter and getter methods
public boolean equals(Object object) {
    boolean result = false;
    if (object == null || object.getClass() != getClass()) {
        result = false;
    } else {
        User user = (User) object;
        if (this.id==user.id) {
            result = true;
        }
    }
    return result;
}

public int hashCode(Object o){
    return id;
  }
}

现在您可以按如下方式检查对象相等性:

List<User> users=new Arraylist<>();

User user1=new User();
user1.setId(1);
user1.setName("ABC");
users.add(user1);

User user2=new User();
user2.setId(2);
user2.setName("MNO");
users.add(user2);

if(users.contains(user2)) // this would check for a presence of user2 in the list

//...

注意:通过类User id字段获得相等性。您可以选择任何字段或实现任何其他逻辑。