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省略
}