已经重写了hashcode和equals还是添加了重复代码

来源:3-13 编程练习

可莉我女儿

2021-06-11 11:48:58

package com.rong.set;

//学生类

public class Student {

private int id;

private String name;

private double score;

//构造方法

public Student(int id, String name, double score) {

super();

this.id = id;

this.name = name;

this.score = score;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public double getScore() {

return score;

}

public void setScore(double score) {

this.score = score;

}

//重写toString

@Override

public String toString() {

String str="学号:"+this.getId()+",姓名:"+this.getName()+",成绩:"+this.getScore();

return str;

}

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + id;

result = prime * result + ((name == null) ? 0 : name.hashCode());

long temp;

temp = Double.doubleToLongBits(score);

result = prime * result + (int) (temp ^ (temp >>> 32));

return result;

}

@Override

public boolean equals(Object obj) {

if(this==obj) 

return true;

if(Student.class==obj.getClass()) {

Student sd=(Student) obj;

return (sd.getName().equals(name))&&(sd.getId()==id);

}

return false;

}

}


package com.rong.test;


import java.util.HashSet;

import java.util.Iterator;

import java.util.Set;


import com.rong.set.Student;


public class StudentTest {


public static void main(String[] args) {

Student s1=new Student(1,"Tom",87);

Student s2=new Student(2,"Lucy",95);

Student s3=new Student(3,"William",65);

//创建集合

Set set=new HashSet();

set.add(s1);

set.add(s2);

set.add(s3);

//迭代器

Iterator it=set.iterator();

//输出集合元素

while(it.hasNext()) {

System.out.println(it.next());

}

//添加一个重复元素

Student s4=new Student(3,"William",66);

set.add(s4);

System.out.println("添加重复元素后:");

it=set.iterator();

//输出集合元素

while(it.hasNext()) {

System.out.println(it.next());

}

}


}

相关截图:

http://img.mukewang.com/climg/60c2dd05098ccba305550261.jpg

写回答

2回答

好帮手慕小脸

2021-06-11

同学你好,同学出现这样的问题是因为hashCode方法。在HashSet添加数据的底层比较中,会先比较hash值是否相等,如果hash值不相等,两个对象不相同,直接添加。如果hash值相等,再来通过equals方法比较对应属性。所以这里需要将hashCode中的score内容去掉:

http://img.mukewang.com/climg/60c3079e09f5c20c07930479.jpg

祝学习愉快~

0

可莉我女儿

提问者

2021-06-11

这里重写的equals方法并没有比较成绩,这样就算我成绩不一样,也应该添加不了的啊

0

0 学习 · 16556 问题

查看课程