求助,为什么我重写了equals()方法后还是可以添加重复信息,谢谢回答
package com.mooc;
public class Student{
int id;
String name;
float score;
public Student(int id, String name, float score) {
this.id = id;
this.name = name;
this.score = score;
}
@Override
public int hashCode() {
return super.hashCode();
}
@Override
public boolean equals(Object obj) {
if(this==obj)
return true;
if(obj.getClass()==Student.class) {
Student stu=(Student)obj;
return ((stu.id==id)&&(stu.name.equals(name)));
}
return false;
}
@Override
public String toString() {
return (this.id+this.name+this.score);
}
}
package com.mooc;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
public class Test{
public static void main(String[] args) {
//定义三个Student类的对象及一个HashSet类的对象
Student stu1=new Student(1, "张三", 80);
Student stu2=new Student(1, "张三", 80);
Student stu3=new Student(3, "王五", 100);
//将Student类的对象添加到集合中
HashSet<Student> set=new HashSet<Student>();
set.add(stu1);
set.add(stu3);
set.add(stu2);
//使用迭代器显示Student类的对象中的内容
Iterator<Student> it=set.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
正在回答
你的hashCode()方法更改为这样:
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + id; result = prime * result + ((name == null) ? 0 : name.hashCode()); //result = prime * result + Float.floatToIntBits(score); return result; }
判定对象是否相等,是通过hashCode()和equals()方法来共同判定的。
祝学习愉快!
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星