我们得到了这些代码:
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个User
个用户名tomhand
现在,使list
变得唯一的最简单方法是什么(即list
不应包含2个具有相同UserName的用户)?
答案 0 :(得分:4)
当向列表中添加元素(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());
}
}
答案 1 :(得分:1)
在Comparable
课程中实施User
界面,然后使用Set<User>
集合
答案 2 :(得分:-1)
使用Set的简单方法,你必须覆盖equals和hashCode。例 Whenever you implement equals, you MUST also implement hashCode
public class User
{
private String username;
//other fields comes here
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result
+ ((username == null) ? 0 : username.hashCode());
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (username == null)
{
if (other.username != null)
return false;
} else if (!username.equals(other.username))
return false;
return true;
}
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
@Override
public String toString()
{
return "User [username=" + username + "]";
}
public static void main(String args[])
{
Set<User> users = new HashSet<User>();
User user1=new User();
user1.setUsername("tomhand");
User user2=new User();
user2.setUsername("mira");
User user3=new User();
user3.setUsername("tomhand");
users.add(user1);
users.add(user2);
users.add(user3);
System.out.println(users);
}
}