欢迎访问宙启技术站
智能推送

Java函数如何实现集合去重?

发布时间:2023-06-30 17:27:58

在Java中,可以使用HashSet来实现集合去重。HashSet是基于HashMap实现的,其中的元素是无序的且没有重复。它使用了哈希表的机制来存储元素,并且允许使用null作为一个元素的值。

HashSet的去重原理是利用元素的哈希值来判断是否重复,因此要实现去重,我们需要重写对象的hashCode()和equals()方法。

首先,我们需要自定义一个对象类,定义它的属性和方法。假设我们定义了一个Person类:

public class Person {
    private String name;
    private int age;

    // 构造方法和其他方法省略

    // 重写hashCode()和equals()方法
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

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

接下来,在主函数中创建一个HashSet,将需要去重的对象添加到HashSet中。由于HashSet是无序的,所以输出结果也是无序的。代码如下:

import java.util.HashSet;

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

        // 创建一些Person对象
        Person person1 = new Person("Alice", 20);
        Person person2 = new Person("Bob", 25);
        Person person3 = new Person("Alice", 20);
        Person person4 = new Person("Alice", 22);

        // 添加对象到HashSet中
        personSet.add(person1);
        personSet.add(person2);
        personSet.add(person3);
        personSet.add(person4);

        // 遍历输出去重后的集合
        for (Person person : personSet) {
            System.out.println(person.getName() + " " + person.getAge());
        }
    }
}

输出结果为:

Alice 20
Alice 22
Bob 25

可以看到,重复的对象被自动去重,只保留了一份。

需要注意的是,为了正确实现去重,必须保证自定义的对象类正确重写了hashCode()和equals()方法。在重写hashCode()方法时,我们可以使用Objects类的hash()方法来生成哈希值。在重写equals()方法时,需要比较所有的属性值是否相等,并在比较之前先判断对象是否为null以及对象类型是否一致。