Java 如何检查或比较对象是否在数组列表中?
我创建了如下pojo类:-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
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
//...
注意:通过classUser
id
字段获得相等值。您可以选择任何字段或对其执行任何其他逻辑。是否要按ID搜索用户?覆盖等于
并使用列表界面的包含方法,@hsz是的我要按ID搜索用户那么您的问题标题很容易误导。你应该考虑改变它。“如果用户的大小很大,那么我怎样才能执行快速搜索?”你的代码是错误的。如果a.equals(b),则a.hashCode()==b.hashCode()。由于hashCode使用的字段名未在equals方法中测试,因此契约未得到履行。