Java 集合去重:如何去除指定字段相同的内容

在 Java 中,可以使用 HashSet 来实现集合去重,HashSet 会自动去除重复的元素。如果要去除集合中某个字段相同的元素,需要重写对象的 equals() 方法和 hashCode() 方法。

1. 创建对象类

首先,创建一个对象类,假设对象类为 Person,其中包含一个 name 字段:

public class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    } 

    public String getName() {
        return name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }
}

2. 创建 HashSet 集合并添加元素

然后,可以创建一个 HashSet 集合,将对象添加到集合中,重复的元素会自动被去除:

import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        HashSet<Person> set = new HashSet<>();

        Person person1 = new Person('Alice');
        Person person2 = new Person('Bob');
        Person person3 = new Person('Alice');

        set.add(person1);
        set.add(person2);
        set.add(person3);

        System.out.println(set); // 输出结果为:[Person{name='Alice'}, Person{name='Bob'}]
    }
}

在上面的例子中,person1person3name 字段相同,但是 HashSet 会自动去除重复的元素,所以最终集合中只有两个元素。

3. 重写 equals() 和 hashCode() 方法

在重写 equals() 方法和 hashCode() 方法时,需要保证 equals() 方法和 hashCode() 方法的一致性,即如果两个对象相等,它们的 hashCode() 方法应该返回相同的值。

注意:

  • 在重写 equals()hashCode() 方法时,应根据实际需求选择合适的字段作为比较依据。
  • 确保 hashCode() 方法的返回值尽量均匀分布,避免哈希冲突。

通过重写 equals()hashCode() 方法,可以根据指定字段对对象进行去重,从而实现更灵活的集合操作。


原文地址: https://www.cveoy.top/t/topic/qoll 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录