hashCode()和equals()只对学号和名字判断,还能输入重复数据。请老师帮忙

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;
   }
}


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

如果之比较学号的话把下图红框部分去掉就可以了,意思是只有学号一致,就认为是重复的。名称同理。如果只判断名称,把学号的比较去掉就可以了

http://img1.sycdn.imooc.com//climg/5c345c7a0001b5db05270214.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • 神sky 提问者 #1
    十分感谢,如果对学号或名字判断是否重复,就是应该把两个判断语句分开来写
    2019-01-08 17:37:17
好帮手慕阿满 2019-01-08 14:15:24

同学的代码完成的不错,另外这里没有插入重复的元素,当学号和名字都相同时,才是重复元素,所以当重复插入1,Tom时,没有添加成功,同学可以自己再试试。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快!

  • 提问者 神sky #1
    就是只有当学号和名字都重复时,是不能添加的吗? 那么,只有学号重复,或者只有名字任意一个重复时,不想让它添加应该怎么办呢
    2019-01-08 14:28:57
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师