1. 实现去除重复对象
List集合去重的实现方式有很多,最常见的是使用Set数据结构实现。Set能够自动去除重复的元素,因此我们可以先将List集合转换成Set集合,再将Set集合转回List集合即可。
List<Object> list = new ArrayList<>(); // 定义一个包含重复元素的List集合
Set<Object> set = new HashSet<>(list); // 将List集合转成Set集合,自动去除重复元素
List<Object> distinctList = new ArrayList<>(set); // 将Set集合转回List集合,得到去重后的List集合
2. 去除自定义对象的重复元素
如果我们要去除的是自定义对象的重复元素,我们需要重写自定义对象的equals()和hashCode()方法。在比较两个对象是否相等的时候,equals()用于比较对象的内容是否相同;而hashCode()用于将每个对象映射为一个唯一的整数值,以便于集合中的元素进行快速查找、添加和删除。
示例:我们定义一个自定义对象Person,包含name和age两个属性,如下所示:
public class Person {
private String name;
private int age;
// 构造方法和getter/setter方法省略
// 重写equals()方法
@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);
}
// 重写hashCode()方法
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
现在我们有一个包含多个Person对象的List集合,如果需要去重,只需要按照上述流程将List转换为Set,再将Set转换为List即可。因为Person对象的equals()和hashCode()方法已经被重写,所以Set集合能够自动去重。
List<Person> list = new ArrayList<>();
// 添加多个Person对象到List集合
Set<Person> set = new HashSet<>(list); // 将List集合转成Set集合,自动去除重复元素
List<Person> distinctList = new ArrayList<>(set); // 将Set集合转回List集合,得到去重后的List集合
3. 注意事项
在使用Set集合去重时,需要保证待去重的元素已经正确实现了equals()和hashCode()方法。如果没有实现这两个方法,Java会调用父类的默认实现,此时两个对象即使内容相同,也可能被当做不同元素处理,从而无法实现去重的目的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:list集合去除重复对象的实现 - Python技术站