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以及对象类型是否一致。
