求助,为什么我重写了equals()方法后还是可以添加重复信息,谢谢回答

求助,为什么我重写了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());

    }

    

}

}


正在回答

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

1回答

你的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()方法来共同判定的。

祝学习愉快!

  • 慕UI5388087 提问者 #1
    非常感谢!
    2018-03-28 20:53:29
  • 老师,这样改的话:‘result = prime * result + ((name == null) ? 0 : name.hashCode());’和原来的:‘return super.hashCode();’有什么不同呀?第二个是返回父类的hashCode()方法吗?我没太理解为什么要这样做?
    2018-04-01 23:33:38
  • irista23 回复 Ironxi_work #3
    第二个是返回父类的hashCode()方法,重写hashCode()方法目的是不相等的对象尽可能有不同的hashCode,相等的对象具有相同的hashCode
    2018-04-02 09:56:01
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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