hashCode()和equals()只对学号和名字判断,还能输入重复数据。请老师帮忙
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class StudentTest {
public static void main(String[] args) {
//定义三个Student类的对象及一个HashSet类的对象
Student s1=new Student(1,"Tom",87);
Student s2=new Student(2,"Lucy",95);
Student s3=new Student(3,"William",65);
Set<Student> s=new HashSet<Student>();
//将Student类的对象添加到集合中
s.add(s1);
s.add(s2);
s.add(s3);
//使用迭代器显示Student类的对象中的内容
Iterator<Student> it=s.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println("**************************************************");
System.out.println("插入学号名字重复数据:");
Student s4=new Student(1,"GWA",100);//学号重复
Student s5=new Student(5,"Tom",90);//名字重复
s.add(s4);
s.add(s5);
it=s.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
//Student类
public class Student{
//根据需求完成Student类的定义
private int stuId;
private String name;
private float score;
public Student(int stuId,String name,float score){
setStuId(stuId);
setName(name);
setScore(score);
}
public int getStuId(){
return this.stuId;
}
public void setStuId(int stuId){
this.stuId=stuId;
}
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
public float getScore(){
return this.score;
}
public void setScore(float score){
this.score=score;
}
@Override
public String toString(){
return "[学号:"+this.stuId+",姓名:"+this.name+",成绩:"+this.score+"]";
}
//集合的源码Cat类中所讲
@Override
public int hashCode(){
final int prime=31;
int result=1;
result=prime*result+stuId;
result=prime*result+((name==null)?0:name.hashCode());
return result;
}
@Override
public boolean equals(Object obj){
//判断对象是否相等
if(this==obj)
return true;
if(obj.getClass()==Student.class){
Student stu=(Student)obj;
return (stu.getStuId()==stuId)&&(stu.getName().equals(name));
}
return false;
}
}0
收起
正在回答
2回答
如果之比较学号的话把下图红框部分去掉就可以了,意思是只有学号一致,就认为是重复的。名称同理。如果只判断名称,把学号的比较去掉就可以了

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
Java零基础入门18
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星