【问题标题】:Using own implementation of HashSet.add()使用自己的 HashSet.add() 实现
【发布时间】:2015-10-05 06:36:12
【问题描述】:

我正在使用 HashSet 将唯一用户添加到哈希集中。这些用户经常从在线源更新,当它从那里读取它时,每次都会获得一个新对象,因此所有用户都会再次添加。

我的用户类中有一个 UserID 变量,我想用它来将用户添加到 HashSet 并确保唯一性。

private HashSet<User> userHashSet = new HashSet<User>();

userHashSet.add(user);
//based on the users id it will either add or not

我想在不损失效率的情况下这样做,最好只有一个 HashSet

【问题讨论】:

    标签: java performance data-structures hash hashset


    【解决方案1】:

    您应该在您的User 类中实现equalshashCode 方法。

    举个例子:

    @Override
    public int hashCode() {
        return getUserId().hashCode();
    }
    
    @Override
    public boolean equals(Object obj) {
        return obj instanceof User &&
            getUserId().equals(((User) obj).getUserId());
    }
    

    【讨论】:

    • 这正是解决方案!谢谢
    【解决方案2】:

    您需要在您的User 类中实现hashCodeequals 方法。只要您正确实施这两种方法,您就会在HashSet 中获得唯一的条目。

    有很多关于如何正确实现这些方法的文章(例如What issues should be considered when overriding equals and hashCode in Java?),但最简单的方法是让您的 IDE 自动生成这些方法,或使用 Apache Commons 帮助程序。

    【讨论】:

      猜你喜欢
      • 2017-02-22
      • 2016-05-02
      • 2012-02-12
      • 1970-01-01
      • 2017-12-19
      • 2018-01-31
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多