Java中筛选出对象数组中重复的数据

在Java编程中,我们经常会遇到需要从一个对象数组中筛选出重复数据的需求。这种情况常见于数据去重、统计、分析等场景。本文将介绍如何使用Java语言来实现筛选出对象数组中重复数据的操作。

问题描述

假设我们有一个对象数组,每个对象具有多个属性。我们希望找出其中重复的数据,并进行统计和分析。例如,我们有一个学生类Student,每个学生对象包含学号、姓名和年龄属性。我们希望从一个学生对象数组中找出重复的学号,并统计每个学号对应的学生个数。

解决方案

数据结构定义

首先,我们需要定义一个学生类Student,包含学号(id)、姓名(name)和年龄(age)属性。

public class Student {
    private int id;
    private String name;
    private int age;

    // 构造方法、getter和setter等省略
}

数据准备

我们假设有一个学生对象数组students,可以手动创建数据进行测试。

Student[] students = new Student[10];
students[0] = new Student(1, "Alice", 18);
students[1] = new Student(2, "Bob", 20);
students[2] = new Student(3, "Charlie", 19);
students[3] = new Student(2, "Dave", 19);
students[4] = new Student(4, "Eve", 21);
students[5] = new Student(1, "Eve", 21);
students[6] = new Student(3, "Frank", 20);
students[7] = new Student(5, "Grace", 18);
students[8] = new Student(6, "Alice", 19);
students[9] = new Student(4, "Bob", 20);

筛选出重复数据

接下来,我们可以使用HashMap来进行筛选操作。HashMap将学号作为键,学生对象作为值。遍历学生对象数组,将学号作为键存入HashMap,如果该学号已经存在,则说明重复。

Map<Integer, Integer> counter = new HashMap<>();
for (Student student : students) {
    int id = student.getId();
    counter.put(id, counter.getOrDefault(id, 0) + 1);
}

在上述代码中,我们使用counter来记录每个学号对应的学生个数。

统计结果

最后,我们可以遍历counter,输出每个学号对应的学生个数。

for (int id : counter.keySet()) {
    int count = counter.get(id);
    System.out.println("学号:" + id + ",学生个数:" + count);
}

完整代码

下面是完整的Java代码示例:

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Student[] students = new Student[10];
        students[0] = new Student(1, "Alice", 18);
        students[1] = new Student(2, "Bob", 20);
        students[2] = new Student(3, "Charlie", 19);
        students[3] = new Student(2, "Dave", 19);
        students[4] = new Student(4, "Eve", 21);
        students[5] = new Student(1, "Eve", 21);
        students[6] = new Student(3, "Frank", 20);
        students[7] = new Student(5, "Grace", 18);
        students[8] = new Student(6, "Alice", 19);
        students[9] = new Student(4, "Bob", 20);

        Map<Integer, Integer> counter = new HashMap<>();
        for (Student student : students) {
            int id = student.getId();
            counter.put(id, counter.getOrDefault(id, 0) + 1);
        }

        for (int id : counter.keySet()) {
            int count = counter.get(id);
            System.out.println("学号:" + id + ",学生个数:" + count);
        }
    }
}

class Student {
    private int id;
    private String name;
    private int age;

    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    // getter和setter省略
}