我创建了一个像这样的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在用户列表中。如果用户的规模很大,那么我该如何进行快速搜索呢?
答案 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
字段获得相等性。您可以选择任何字段或实现任何其他逻辑。