使Java List <user>变得独特的最简单方法是什么?

时间:2016-01-13 15:12:27

标签: java

我们得到了这些代码:

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的用户)?

3 个答案:

答案 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);

}
 }