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

Java 如何检查或比较对象是否在数组列表中?,java,search,arraylist,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

我创建了如下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);

 //...
List users=new Arraylist();
用户user1=新用户();
user1.setId(1);
user1.setName(“ABC”);
users.add(user1);
用户user2=新用户();
user2.setId(2);
user2.setName(“MNO”);
users.add(user2);
//...
现在我想找到用户1在用户列表中。如果用户数量很大,那么如何执行快速搜索?

方法按您的要求执行。该方法使用
equals()
方法来确定两个对象是否相同。因此,只需重写
equals()
,并重写
hashCode()


如果您想通过Id快速搜索它们,我宁愿使用
HashMap
而不是
List

如果您想执行快速搜索,您可以使用(或者如果您想跟踪重复的数量)来存储数据,您还需要实现和-并使用,或者使用和提供

另一个解决方案是维护排序的列表(关于一些
比较器)并使用

如果返回-1,则ArrayList中不存在
user1
。我相信这是知道列表中是否存在用户对象的最简单方法

您可能有以下情况:

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

您必须实现
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

//...
现在,您只需按如下方式检查对象相等性:

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

//...
List users=new Arraylist();
用户user1=新用户();
user1.setId(1);
user1.setName(“ABC”);
users.add(user1);
用户user2=新用户();
user2.setId(2);
user2.setName(“MNO”);
users.add(user2);
if(users.contains(user2))//这将检查列表中是否存在user2
//...

注意:通过class
User
id
字段获得相等值。您可以选择任何字段或对其执行任何其他逻辑。

是否要按ID搜索用户?覆盖
等于
并使用
列表
界面的
包含
方法,@hsz是的我要按ID搜索用户那么您的问题标题很容易误导。你应该考虑改变它。“如果用户的大小很大,那么我怎样才能执行快速搜索?”你的代码是错误的。如果a.equals(b),则a.hashCode()==b.hashCode()。由于hashCode使用的字段名未在equals方法中测试,因此契约未得到履行。