重写equals方法后,虽然不显示重复的元素了,但是查找还是能找到,为什么?

重写equals方法后,虽然不显示重复的元素了,但是查找还是能找到,为什么?

相关截图:

http://img1.sycdn.imooc.com//climg/60cb0df10957797009001180.jpg

问题描述:

如果,s3和s4是相同元素,则应该只添加一个,另一个应该是查不到的状态啊,为什么在这里是可以查到的呢?

相关代码:

package com.demon.modle;

public class 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 stuId;
}

public void setStuId(int stuId) {
this.stuId = stuId;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public float getScore() {
return score;
}

public void setScore(float score) {
this.score = score;
}

@Override
public String toString() {
return "student [stuId=" + stuId + ", name=" + name + ", score=" + score + "]";
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + Float.floatToIntBits(score);
result = prime * result + stuId;
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj.getClass() == student.class) {
student stu = (student) obj;
return (stu.getName().equals(name) )&& stu.getScore() == score && stu.getStuId() == stuId;
}
return false;

}

}

相关代码:

​package com.demon.modle;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
student s = new student(1,"张三",65);
student s2 = new student(2,"李四",87);
student s3 = new student(3,"王五",95);
student s4 = new student(3,"王五",95);

Set set = new HashSet();
set.add(s);
set.add(s2);
set.add(s3);
set.add(s4);

Iterator it = set.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}

System.out.println("添加重复元素后查找:");
if(set.contains(s4)) {
System.out.println("包含实例s4");
System.out.println(s4);
}else {
System.out.println("不包含");
System.out.println("s3:"+s3);
}

}
}


正在回答 回答被采纳积分+1

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

1回答
好帮手慕阿园 2021-06-17 18:46:53

同学你好,查找和添加同理,查找时也是需要通过hashCode和equals方法来判断查找的对象在set集合中是否存在,重写hashCode和equals方法后,查找是s4对象的内容在集合中是否存在,所以无论写s3或者s4都会找到对应的对象的

另外,当类名由一个单词组成时,该单词首字母大写;如果类名由多个单词组成,则每个单词的首字母均大写。如:test应改为:Test

祝学习愉快~

  • 提问者 慕斯5590525 #1

    我重写hashCode接口中的equals方法后,重复的元素于是就不会被添加进队列吗,如果都没有被添加进队类又怎么能查找到呢



    2021-06-29 15:50:57
  • 好帮手慕阿园 回复 提问者 慕斯5590525 #2

    同学你好,查找元素也是通过hashCode和equals方法来查找的,所以这里可以理解为s3和s4是同一个对象,所以添加时添加不上重复的元素,查找时这两个对象也被视为同一个对象,无论写成s3还是s4,都会查找出来的

    祝学习愉快~

    2021-06-29 16:38:12
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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