我们得到了这些代码:
User user1=new User();
user1.setUserName("tomhand");
User user2=new User();
user2.setUserName("mira");
User user3=new User();
user3.setUserName("tomhand");
.......
List<User> list = new ArrayList<User>();
list.add(user1);
list.add(user2);
list.add(user3);
....
我们可以看到list
包含2个具有相同用户名tomhand
的User
现在,使 list
变得唯一(即 list
不应包含 2 个具有相同 UserName 的用户)的最简单方法是什么?
最佳答案
将元素添加到列表 ( ArrayList
) 时,它不会对现有元素执行任何检查来检查它是新元素还是已经存在。将无法使用List
并直接获得所需的行为。
您可以使用Set
仅存储独特的集合 User
基于 name
的实例它的属性。
它正在使用 HashSet<User>
实现,它使用 hashcode()
传入对象的名称,用于将它们存储在某个位置。如果该元素已经存在,则它使用 equals()
来比较两个对象。
这是一个示例:
public class User {
private String name;
public User(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!(obj instanceof User))
return false;
User user = (User) obj;
return user.name.equals(this.name);
}
@Override
public int hashCode() {
return name.hashCode() ;
}
}
class UserMain {
public static void main(String[] args) {
Set<User> set = new HashSet<>();
set.add(new User("A"));
set.add(new User("B"));
set.add(new User("A"));
System.out.println(set.size());
}
}
关于java - 使 Java List<User> 变得唯一的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34770204/