Hashset添加自定义类对象的时候,能实现当元素重复时,将该元素与hashset里的那个元素叠加吗。
比如Student类 里面有id grades(都是String类型)当id重复时 将第二个grades加到第一个grades后面
你想实现的效果:同一个学生有两个成绩的时候,这两个成绩可以合并?
如果是这个,实现不了
去重是重复的元素不会放到集合中,而且这个重复的判断条件有时还需要自己定义
能
import java.util.HashSet;
/**
* 对象去重,需要重写 hashcode 和 equals 方法
*
* @Author: Negen
* @Date: 2022/04/07/16:26
* @Description:
*/
public class Demo {
public static void main(String[] args) {
Student zs = new Student("123", "90");
Student ls = new Student("123", "89");
Student w5 = new Student("456", "90");
HashSet<Student> students = new HashSet<>();
students.add(zs);
students.add(ls);
students.add(w5);
System.out.println(students.size());
students.forEach(student -> System.out.println(student.toString()));
}
}
class Student{
String id;
String grade;
Student(String id, String grade){
this.id = id;
this.grade = grade;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Student))return false;
Student stuObj = (Student) obj;
return this.id.equals(stuObj.getId());
}
@Override
public int hashCode() {
return this.id.hashCode();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
@Override
public String toString() {
return String.format("[id=%s,grade=%s]", id, grade);
}
}