java - 使 Java List<User> 变得唯一的最简单方法是什么?

标签 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个具有相同用户名tomhandUser 现在,使 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/

相关文章:

java - onAttach() or onActivityCreated(),哪个是读取activity最好的地方?

java - symja 数学解析器无法识别 Abs[x]

java - 如何使用 Struts 2 在同一行中放置多个文本字段而不使用主题 ="simple"?

java - Spring - 多种配置和@CompontentScan顺序

java - 隐藏状态栏android时的白条一瞥(如何让它像Whatsapp状态一样)

java - MoveToElement 不适用于鼠标悬停并按住元素上的单击

java - Java 中的 SuppressWarnings ("unchecked") 是什么?

java - 为什么我通过 Bazel 构建的应用程序在添加 Firebase 依赖项后一打开就会崩溃?

java - 如何在不创建 .iml 文件的情况下将 gradle 项目导入 Intellij

java - 文件处理异常