【问题标题】:Java HashSet duplicates comparisonJava HashSet 重复比较
【发布时间】:2011-03-03 20:19:19
【问题描述】:

我有一个类Person,其中包含String firstName, lastName。我想将此类的实例插入List,但我不想插入重复项。

如何使用HashSet 以便它使用firstName+lastName 之类的东西来找出重复项?

【问题讨论】:

    标签: java list duplicates hashset


    【解决方案1】:

    您的Person 类中需要一个equals() 和一个hashCode() 方法。

    equals() 很简单,对于hashCode(),最简单的解决方案是:

    public int hashCode() {
      return Arrays.hashCode( new Object[] { firstName, lastName } );
    }
    

    虽然如果您的 Person 对象是不可变的(如果您将它放在 HashSet 中,它应该是不可变的),您应该缓存这个值。

    【讨论】:

      【解决方案2】:

      您需要让您的 .equals() 方法返回 true 用于两个具有相同名字和姓氏的 Persons。您还需要实现.hashcode() 方法,以确保两个相等的对象具有相同的hashcode。

      您的问题是指使用List,然后提到HashSet。如果保留插入顺序很重要,那么 HashSet 不是您想要的,您应该使用 LinkedHashSet

      【讨论】:

        【解决方案3】:

        您应该只使用Set 而不是List。如果您关心广告订单,请使用LinkedHashSet

        【讨论】:

          【解决方案4】:

          重要 -> 你需要实现equals AND hashcode

          始终实现两者。并且它们必须一致-> 如果 2 个对象相等,它们必须具有相同的哈希码。

          这非常重要。 再读一遍。 :)

          HashSets 和 HashMaps 使用 hashcode 和 equals 来比较元素。不同的元素可能有相同的hashcode,但它们不相等

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-05
            • 2014-08-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多