java Collection 指定规则去重

举报
皮牙子抓饭 发表于 2024/02/27 09:36:41 2024/02/27
【摘要】 Java Collection 指定规则去重在Java中,Collection是一组对象的容器,常用的实现类包括List、Set和Map等。在处理数据时,经常会遇到需要去除重复元素的情况。本文将介绍如何使用Java Collection来实现指定规则的去重操作。Set接口去重Set是一种无序、不可重复的集合。当我们向Set集合添加元素时,如果元素已经存在于Set中,则添加操作将被忽略,也就是...

Java Collection 指定规则去重

在Java中,Collection是一组对象的容器,常用的实现类包括List、Set和Map等。在处理数据时,经常会遇到需要去除重复元素的情况。本文将介绍如何使用Java Collection来实现指定规则的去重操作。

Set接口去重

Set是一种无序、不可重复的集合。当我们向Set集合添加元素时,如果元素已经存在于Set中,则添加操作将被忽略,也就是说不会出现重复的元素。 假设我们有一个List集合,需要将其中的元素按照指定的规则进行去重。我们可以通过将List转换为Set来实现去重操作。例如:

javaCopy code
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("banana");
list.add("orange");
Set<String> set = new HashSet<>(list);
System.out.println("去重后的集合:" + set);

运行上述代码,输出结果为:

plaintextCopy code
去重后的集合:[orange, apple, banana]

可以看到,重复的元素"banana"只保留了一个。 需要注意的是,Set是一种无序的集合,因此去重后的元素顺序可能与原始列表不同。

自定义规则去重

有时我们需要根据自定义的规则进行去重操作。例如,我们有一个Person类,需要根据姓名和年龄进行去重。

javaCopy code
class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // 省略getter和setter方法
    @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);
    }
}

在Person类中,我们重写了equals()和hashCode()方法,根据姓名和年龄判断两个Person对象是否相等。 现在,我们有一个Person对象的List集合,希望根据姓名和年龄进行去重。可以使用Set来实现:

javaCopy code
List<Person> personList = new ArrayList<>();
personList.add(new Person("Alice", 25));
personList.add(new Person("Bob", 20));
personList.add(new Person("Alice", 30));
personList.add(new Person("Bob", 20));
Set<Person> personSet = new HashSet<>(personList);
System.out.println("去重后的集合:" + personSet);

运行上述代码,输出结果为:

plaintextCopy code
去重后的集合:[Person{name='Alice', age=25}, Person{name='Bob', age=20}, Person{name='Alice', age=30}]

可以看到,根据我们定义的规则,重复的Person对象被去重,只保留了一次出现的对象。


学生管理系统,需要对学生信息进行去重。每个学生的信息包括学号、姓名和年龄。 首先,我们定义一个Student类:

javaCopy code
class Student {
    private String id;
    private String name;
    private int age;
    // 构造方法、getter和setter省略
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return Objects.equals(id, student.id) && Objects.equals(name, student.name) && age == student.age;
    }
    @Override
    public int hashCode() {
        return Objects.hash(id, name, age);
    }
}

接下来,我们在学生管理系统中使用List来存储学生对象。如果有重复的学生信息(学号、姓名和年龄都相同),我们需要去除重复的学生。 示例代码如下所示:

javaCopy code
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class StudentManagementSystem {
    public static void main(String[] args) {
        List<Student> studentList = new ArrayList<>();
        studentList.add(new Student("1001", "Alice", 18));
        studentList.add(new Student("1002", "Bob", 20));
        studentList.add(new Student("1001", "Alice", 18));
        studentList.add(new Student("1003", "Charlie", 19));
        studentList.add(new Student("1002", "Bob", 20));
        Set<Student> uniqueStudents = new HashSet<>(studentList);
        
        System.out.println("去重后的学生列表:");
        for (Student student : uniqueStudents) {
            System.out.println(student.getId() + " " + student.getName() + " " + student.getAge());
        }
    }
}

运行上述代码,输出结果为:

plaintextCopy code
去重后的学生列表:
1002 Bob 20
1003 Charlie 19
1001 Alice 18

可以看到,重复的学生信息被去重,只保留了一次出现的学生。 以上示例代码演示了如何在学生管理系统中使用Set来进行学生信息的去重操作。这样可以确保系统中不会存在重复的学生记录,提高数据的准确性和一致性。


Java Collection是Java标准库提供的用于处理一组对象的容器类。它包含了一系列接口和类,其中最常用的接口有List、Set和Map,它们分别对应有序集合、无序集合和键值对集合的概念。在Collection中,提供了丰富的函数用以操作和处理集合中的元素。 下面我们将详细介绍Java Collection中常用的函数:

  1. add(E element): 向集合中添加一个元素。
  2. addAll(Collection<? extends E> collection): 将一个集合中的所有元素添加到当前集合中。
  3. contains(Object object): 判断当前集合是否包含指定的元素。
  4. remove(Object object): 从集合中移除指定的元素。
  5. removeAll(Collection<?> collection): 从集合中移除与指定集合中的元素相同的元素。
  6. retainAll(Collection<?> collection): 从集合中保留与指定集合中的元素相同的元素,移除其他元素。
  7. clear(): 清空集合中的所有元素。
  8. size(): 返回集合中的元素个数。
  9. isEmpty(): 判断集合是否为空,即是否没有元素。
  10. iterator(): 返回一个迭代器对象,用于遍历集合中的元素。
  11. toArray(): 将集合转换为数组。
  12. containsAll(Collection<?> collection): 判断当前集合是否包含指定集合中的所有元素。
  13. equals(Object object): 比较两个集合是否相等,即判断两个集合中的元素是否完全相同。
  14. hashCode(): 返回集合的哈希码值。
  15. toString(): 返回集合的字符串表示。 在具体的集合类中,还可能会提供一些特定的函数以满足具体需求。例如:
  • List接口扩展了Collection接口,并提供了根据索引操作元素的函数,如get(int index)、set(int index, E element)、indexOf(Object object)等。
  • Set接口定义了不重复元素的集合,并提供了特定的去重函数,如addAll(Collection<? extends E> collection)、removeIf(Predicate<? super E> filter)等。
  • Map接口定义了键值对集合,并提供了根据键访问值的方法,如put(K key, V value)、get(Object key)、containsKey(Object key)等。

结语

通过使用Java Collection中的Set接口,我们可以方便地实现指定规则的去重操作。无论是简单的元素去重,还是基于自定义规则的去重,都可以通过Set轻松实现。这为我们处理重复数据提供了方便且高效的解决方案。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。