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

来源:3-11 编程练习

慕UI5388087

2018-03-27 23:26:09

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回答

一叶知秋519

2018-03-28

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

祝学习愉快!

0
hrista23
回复
hronxi_work
h 第二个是返回父类的hashCode()方法,重写hashCode()方法目的是不相等的对象尽可能有不同的hashCode,相等的对象具有相同的hashCode
h018-04-02
共3条回复

0 学习 · 14452 问题

查看课程