Java哈希集重复比较

Java哈希集重复比较,java,list,duplicates,hashset,Java,List,Duplicates,Hashset,我有一个类Person,它包含字符串firstName,lastName。我想在列表中插入此类的实例,但不想插入重复的实例 如何使用散列集,使其使用类似于名字+姓氏的内容来找出重复项?您需要使您的.equals()方法为两个同名的人返回true。您还需要实现.hashcode()方法,以确保两个相等的对象具有相同的hashcode 您的问题涉及使用列表,然后提到HashSet。如果保留插入顺序很重要,那么哈希集不是您想要的,您应该使用。您应该只使用集而不是列表。如果您关心插入顺序,请在Perso

我有一个类
Person
,它包含
字符串firstName,lastName
。我想在
列表中插入此类的实例,但不想插入重复的实例


如何使用
散列集
,使其使用类似于
名字+姓氏
的内容来找出重复项?

您需要使您的
.equals()
方法为两个同名的
人返回
true
。您还需要实现
.hashcode()
方法,以确保两个相等的对象具有相同的hashcode


您的问题涉及使用列表,然后提到HashSet。如果保留插入顺序很重要,那么
哈希集
不是您想要的,您应该使用。

您应该只使用
而不是
列表
。如果您关心插入顺序,请在
Person
类中使用。

您需要
equals()
hashCode()
方法

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

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

虽然如果您的
Person
对象是不可变的(如果您将其放入哈希集中,它应该是不可变的),您应该缓存该值。

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

始终实现这两个目标。它们必须一致->如果2个对象相等,则它们必须具有相同的哈希代码

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

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