📜  如何从Java中的 LinkedHashSet 中消除重复的用户定义对象?(1)

📅  最后修改于: 2023-12-03 14:51:47.010000             🧑  作者: Mango

如何从 Java 中的 LinkedHashSet 中消除重复的用户定义对象?

在 Java 中,我们经常需要将对象存储在集合中。当我们使用 HashSet 或者 LinkedHashSet 这样的无序集合时,集合中的元素不能重复。但是,如果我们需要使用对象作为元素并希望消除重复的对象,该怎么办呢?

定义自定义对象

首先,让我们定义一个 Person 类作为例子。该类有两个字段:nameage

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 消除重复对象

现在让我们使用 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 消除重复的用户定义对象。这使得我们能够方便地存储和处理对象集合,而无需担心重复的对象。