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对象。
热门推荐
高考前去寺庙怎么祈福技巧
简单几招,教你判断有机肥是否腐熟
描写儿童生活的古诗(精选25首)
友谊中的互相支持与帮助
arping 命令解析
院士邀请|大模型新研究:思维图DoT用数学理论确保AI逻辑一致性
下肢水肿、疼痛?可能是腘窝囊肿“惹的祸”
西宁游玩攻略
高功能自闭症表现
广西三月三是什么节日?广西三月三的来历和风俗
高血压患者预防肾病指南:4个关键措施和早期症状识别
逾期结清了征信多久恢复
开封特产美食全攻略:从传统小吃到特色名菜
中国境内古人类是现代中国人祖先吗?
78年前,中国原子弹种子计划赴美考察
居家门窗有冷凝水怎么办?
清鼻涕变成了黄鼻涕,是感冒严重了吗?2个方法,让感冒更快好起来
广电手机卡信号好不好?
天然气设备出现故障怎么办?如何快速解决这些问题?
环太平洋火山地震带与地中海—喜马拉雅火山地震带:地球的活跃脉搏
判断手机是否感染病毒的方法与防范建议
如何调整汽车音响的齿音效果?调整过程中有哪些技巧和注意事项?
施琅大将军争议的背景是什么
航运两大霸主之比:空客320好还是波音737飞机好?
如何使用万用表进行电路检测?这种检测方法有哪些实际应用?
头昏头晕吃什么药有效
5G网络频繁中断?教你轻松修复手机5G连接问题
西游记中地仙之祖镇元子的法术怎么样?是什么地位?
医生提醒:为什么躺着刷手机会导致视力严重失衡?这些危害不容忽视
充电宝能否带上飞机:全面解析与注意事项