2 回答
TA贡献1934条经验 获得超2个赞
使用一个Map,而不是一个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贡献1875条经验 获得超3个赞
不存在部分相等的情况。您的方法equals()
返回true
或false
。在您的情况下,您所说的平等仅由人的身份决定。也就是说,如果您添加一个具有相同 id 的人,其他任何事情都不重要,即使visits
值不同,这两个 Person 实例也会被判断为相等。因此,如果您将 Person 实例存储在集合中并添加一个 id 为 1 的 Person - 如果该集合已经包含一个 id 为 1 的 Person,则旧的将被新的替换。还要记住Set
没有顺序。如果您想保留订单,请使用SortedSet
或List
。但是如果你使用List
你将不得不编写代码来确保你自己不允许重复
添加回答
举报