Java HashSet重复比较

时间:2011-03-03 20:19:19

标签: java list duplicates hashset

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

如何使用HashSet使用类似firstName+lastName的内容来计算重复内容?

4 个答案:

答案 0 :(得分:10)

您的equals()课程需要hashCode()Person方法。

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

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:0)

您应该使用Set代替List。如果您关心广告订单,请使用LinkedHashSet