Hashset添加自定义类对象的时候,能实现当元素重复时,将该元素与hashset里的那个元素叠加吗。
比如Student类 里面有id grades(都是String类型)当id重复时 将第二个grades加到第一个grades后面
添加时,根据id进行判断,然后进行拼接并放入set中。
https://ask.csdn.net/questions/7684969?spm=1005.2025.3001.5141
这是你小号吗,问题,描述一模一样
重写自定义类的equals和hashcode方法,然后在equals方法中判断id一致时,将当前对象的grades和比较的对象的grades合并,返回true
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);
}
}