[英]Java HashSet duplicates comparison
我有一個類Person
,其中包含String firstName, lastName
。 我想將此類的實例插入List
,但我不想插入重復項。
我如何使用HashSet
使得它使用firstName+lastName
類的東西來計算重復項?
你需要在Person
類中使用equals()
和hashCode()
方法。
equals()
很簡單,而對於hashCode()
,最簡單的解決方案是:
public int hashCode() {
return Arrays.hashCode( new Object[] { firstName, lastName } );
}
雖然如果你的Person
對象是不可變的(因為它應該是,如果你把它放在一個HashSet中),你應該緩存這個值。
你需要讓你的.equals()
方法為具有相同名字和姓氏的兩個Person
返回true
。 您還需要實現.hashcode()
方法以確保兩個相等的對象具有相同的哈希碼。
您的問題是指使用List,然后提到HashSet。 如果保留插入順序很重要,那么HashSet
不是你想要的,你應該使用LinkedHashSet
。
重要 - >您需要實現equals和hashcode
始終實施兩者。 並且它們必須是一致的 - >如果2個對象是等於它們必須具有相同的哈希碼。
這個非常重要。 再讀一遍。 :)
HashSets和HashMaps使用hashcode和equals來比較元素。 不同的元素可能具有相同的哈希碼,但它們不等於
您應該只使用Set
而不是List
。 如果您關心插入順序,請使用LinkedHashSet
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.