簡體   English   中英

Java HashSet重復比較

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM