【发布时间】:2011-03-03 20:19:19
【问题描述】:
我有一个类Person,其中包含String firstName, lastName。我想将此类的实例插入List,但我不想插入重复项。
如何使用HashSet 以便它使用firstName+lastName 之类的东西来找出重复项?
【问题讨论】:
标签: java list duplicates hashset
我有一个类Person,其中包含String firstName, lastName。我想将此类的实例插入List,但我不想插入重复项。
如何使用HashSet 以便它使用firstName+lastName 之类的东西来找出重复项?
【问题讨论】:
标签: java list duplicates hashset
您的Person 类中需要一个equals() 和一个hashCode() 方法。
equals() 很简单,对于hashCode(),最简单的解决方案是:
public int hashCode() {
return Arrays.hashCode( new Object[] { firstName, lastName } );
}
虽然如果您的 Person 对象是不可变的(如果您将它放在 HashSet 中,它应该是不可变的),您应该缓存这个值。
【讨论】:
您需要让您的 .equals() 方法返回 true 用于两个具有相同名字和姓氏的 Persons。您还需要实现.hashcode() 方法,以确保两个相等的对象具有相同的hashcode。
您的问题是指使用List,然后提到HashSet。如果保留插入顺序很重要,那么 HashSet 不是您想要的,您应该使用 LinkedHashSet。
【讨论】:
您应该只使用Set 而不是List。如果您关心广告订单,请使用LinkedHashSet。
【讨论】:
重要 -> 你需要实现equals AND hashcode
始终实现两者。并且它们必须一致-> 如果 2 个对象相等,它们必须具有相同的哈希码。
这非常重要。 再读一遍。 :)
HashSets 和 HashMaps 使用 hashcode 和 equals 来比较元素。不同的元素可能有相同的hashcode,但它们不相等
【讨论】: