HashSet重复对象不插入问题解决方案
创作时间:
作者:
@小白创作中心
HashSet重复对象不插入问题解决方案
引用
CSDN
1.
https://blog.csdn.net/m0_64458420/article/details/140337186
本文讨论了在使用Java的HashSet存储自定义对象时遇到的重复对象插入问题,并详细介绍了如何通过重写hashCode和equals方法来解决这一问题。
问题描述
在使用HashSet存储自定义的People对象时,发现即使创建了多个具有相同属性的对象,HashSet仍然会将它们都添加进去,这与HashSet不允许重复元素的特性相悖。
package com.sgu.test6;
public class People {
private String name;
private String age;
public People() {}
public People(String name, String age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
package com.sgu.test6;
import java.util.HashSet;
public class HashSetTest {
public static void main(String[] args) {
HashSet<People> hs = new HashSet<>();
People p1 = new People("zhangsan", "21");
People p2 = new People("lisi", "22");
People p3 = new People("zhangsan", "21");
People p4 = new People("lisi", "22");
hs.add(p1);
hs.add(p2);
hs.add(p3);
hs.add(p4);
System.out.println("共有" + hs.size() + "个人");
}
}
原因分析
HashSet是基于HashMap实现的,它通过hashCode和equals方法来判断对象是否重复。对于Java提供的基本类型如String和Integer,它们已经实现了hashCode和equals方法,因此可以直接使用HashSet而不会出现重复元素。但对于自定义对象,需要手动重写这两个方法。
解决方案
在People类中重写hashCode和equals方法:
@Override
public int hashCode() {
return name.hashCode() + age.hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
} else if (obj instanceof People) {
People p = (People) obj;
if (name.equals(p.getName()) && age.equals(p.getAge())) {
return true;
} else {
return false;
}
} else {
return false;
}
}
或者使用IDEA的快捷键Alt+Insert,选择equals() and hashCode(),让IDEA自动生成相关代码。
结果验证
经过上述修改后,再次运行HashSetTest类,可以看到HashSet正确地识别了重复对象,只存储了两个不同的People对象。
热门推荐
冬日泉州两日游:开元寺-西街-五店市
泉州必打卡:欧乐堡、古城、浔埔村
开元寺&蟳埔村:泉州两天一夜探秘
霞浦闽南特色小吃攻略
蜂蜜是什么?蜂蜜什么样子?
嗓子干、嗓子疼时喝蜂蜜水真的有效吗?
母乳喂养对母亲和婴儿都有好处
毛豆的12个营养成分、10大功效及食用禁忌
石家庄亲子游最佳时间:避开大雪日!
现代加油站安全管理体系构建
做血脂检查要注意什么
做血脂检查前需要空腹多长时间
赵本山携新作强势回归,两部新剧同日开播引热议
NBA中国赛重返澳门!从姚明到崔永熙的篮球传承
中美篮球交流赛冲突背后:中国男篮的挑战与机遇
绍兴黄酒小镇:千年古镇展新颜,文旅融合谱新篇
吃毛豆有哪6大好处?但这4类人不宜食用!
吃毛豆有哪6大好处?但这4类人不宜食用!
泉州必打卡:西街、开元寺、梧林传统村落全攻略
泉州申遗成功!开元寺、洛阳桥、清源山的故事
泉州申遗成功后,蔡国强带你漫游宝藏城市
血脂检查指标全解析:从基础概念到健康管理建议
石家庄极地海洋世界亲子打卡攻略:300种海洋生物等你来探秘!
心理压抑如何释放
交罚款即可免拘留?揭秘罚款与拘留的内在关系
刑事拘留的执行程序是怎样的
江大园社区舞蹈队:用舞蹈点亮邻里情
BBC舞动奇迹:揭秘跳舞的神奇好处
保温杯检测标准与流程详解
赵丽颖肖战春晚新作揭秘!