📅  最后修改于: 2023-12-03 14:51:47.010000             🧑  作者: Mango
在 Java 中,我们经常需要将对象存储在集合中。当我们使用 HashSet 或者 LinkedHashSet 这样的无序集合时,集合中的元素不能重复。但是,如果我们需要使用对象作为元素并希望消除重复的对象,该怎么办呢?
首先,让我们定义一个 Person
类作为例子。该类有两个字段:name
和 age
。
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
我们覆盖了 equals()
和 hashCode()
方法,以便在比较两个 Person
对象时进行正确的比较。
现在让我们使用 LinkedHashSet 和 Person 对象创建一个新集合。我们将尝试向集合中添加重复的对象并检查集合的大小。
LinkedHashSet<Person> set = new LinkedHashSet<>();
Person person1 = new Person("Alice", 25);
Person person2 = new Person("Bob", 30);
Person person3 = new Person("Alice", 25);
set.add(person1);
set.add(person2);
set.add(person3);
System.out.println("Set size after adding 3 elements: " + set.size());
输出应该是:
Set size after adding 3 elements: 2
从输出中可以看出,尽管我们尝试向集合中添加三个 Person
对象,但只有两个对象被添加,而重复的对象被排除了。这是因为我们提供了 equals()
和 hashCode()
方法,因此集合能够正确地进行比较并消除重复的对象。
通过提供 equals()
和 hashCode()
方法,我们可以使用 LinkedHashSet 消除重复的用户定义对象。这使得我们能够方便地存储和处理对象集合,而无需担心重复的对象。