2 回答

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
使用一個(gè)Map,而不是一個(gè)Set。
List<Person> data = new ArrayList<>();
data.add(new Person(1, Max, 4);
data.add(new Person(2, Richard, 7);
data.add(new Person(3, Tom, 4);
Map<Integer, Person> map = new HashMap<>();
data.forEach(person -> map.put(person.getId(), person));
// new Data incoming
// could be the same Person (all 3 variables same)
// could be existing Person but with changed variables (id stays the same)
// could be completely new Person (new id)
Person newPerson = ...;
map.put(newPerson.getId(), newPerson);
TreeMap如果你想按 ID 排序,或者LinkedHashMap你想按輸入順序排序,你可以使用。

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊
不存在部分相等的情況。您的方法equals()
返回true
或false
。在您的情況下,您所說的平等僅由人的身份決定。也就是說,如果您添加一個(gè)具有相同 id 的人,其他任何事情都不重要,即使visits
值不同,這兩個(gè) Person 實(shí)例也會(huì)被判斷為相等。因此,如果您將 Person 實(shí)例存儲(chǔ)在集合中并添加一個(gè) id 為 1 的 Person - 如果該集合已經(jīng)包含一個(gè) id 為 1 的 Person,則舊的將被新的替換。還要記住Set
沒有順序。如果您想保留訂單,請(qǐng)使用SortedSet
或List
。但是如果你使用List
你將不得不編寫代碼來確保你自己不允許重復(fù)
添加回答
舉報(bào)