踩坑——ArrayList使用HashSet去重无效(已解决)

简介: 踩坑——ArrayList使用HashSet去重无效(已解决)

起因

公司有个搜索需求需要实现,根据用户输入的关键词展示相对应的数据

因为不需要进行排序,所以博主这里使用了HashSet去重 但是没有去重成功,看了很久的代码,后来发现是因为…

描述示例

下图代码博主已经添加了HashSet,但是运行起来依然有好几个“一年级六班 赵六”,显然这并没有去重成功,那么这是什么原因呢?

原因分析

HashSet去重原理

HashSet是通过hashCode和equals两方法保证数据的唯一性的,如果hashCode相同才判断元素的equals;因为我这里添加的是对象,且对象有多个值,那么我们需要让HashSet认为这两个是同一个对象,我们在向集合中存储数据,首先是要判断哈希值的

说到这,想必不少人已经猜出来具体原因了吧,既然知道原因了,那就开始解决问题


说到这,想必不少人已经猜出来具体原因了吧,既然知道原因了,那就开始解决问题

解决问题

如果不重写hashCode方法和equal方法,那么属性值重复的对象都是可以添加成功的

(左图为原数据类,可以看到是没有重写equals和hashCode方法的,中图为重写equals和hashCode后的数据类,右图为运行结果)

可以看到重写equals和hashCode方法后,成功去重了


目录
相关文章
|
Java
java中File的delete()方法删除文件失败的原因和解决方案
java中File的delete()方法删除文件失败的原因和解决方案
1383 0
|
Java 数据挖掘 BI
如何使用Hutool插入图片到Excel中?
如何使用Hutool插入图片到Excel中?
720 0
|
对象存储
阿里云对象存储oss+picgo+typora实现步骤及无法上传图片解决方案
阿里云对象存储oss+picgo+typora实现步骤及无法上传图片解决方案
582 0
阿里云对象存储oss+picgo+typora实现步骤及无法上传图片解决方案
|
11月前
|
JavaScript 前端开发 开发者
Vue 3中的Proxy
【10月更文挑战第23天】Vue 3中的`Proxy`为响应式系统带来了更强大、更灵活的功能,解决了Vue 2中响应式系统的一些局限性,同时在性能方面也有一定的提升,为开发者提供了更好的开发体验和性能保障。
424 7
|
JavaScript API
Vue学习之--------列表排序(ffilter、sort、indexOf方法的使用)、Vue检测数据变化的原理(2022/7/15)
这篇博客文章讲解了Vue中列表排序的方法,使用`filter`、`sort`和`indexOf`等数组方法进行数据的过滤和排序,并探讨了Vue检测数据变化的原理,包括Vue如何通过setter和数组方法来实现数据的响应式更新。
Vue学习之--------列表排序(ffilter、sort、indexOf方法的使用)、Vue检测数据变化的原理(2022/7/15)
|
运维 Linux 网络安全
"揭秘Traceroute穿越防火墙的隐形障碍:为何路径追踪在此中断?解锁隐藏的网络回显之谜!"
【8月更文挑战第19天】Traceroute是网络故障排查的关键工具,用于追踪数据包路径。但防火墙常致回显问题,表现为路由节点信息缺失。本文通过案例分析此现象:数据包遇防火墙时,因安全策略拦截ICMP或UDP数据包而显示星号。解决方法包括检查防火墙策略以确保ICMP和UDP端口未被阻止,在Linux中使用ICMP版本的Traceroute(如`traceroute -I`),关闭防火墙接口管理功能,或调整安全策略以限制Traceroute访问。针对具体网络环境灵活运用这些策略可有效解决问题。
728 0
|
存储 测试技术 API
apifox实例应用-自动化测试用例for循环的使用
总结来说,通过在Apifox自动化测试用例中结合for循环的使用,我们可以有效地对接口进行批量测试,提升测试效率和覆盖率。同时,通过参数化测试数据的灵活应用,能够确保我们的接口在不同的输入条件下都能保持正确的行为。这种方法能够显著减少手动测试工作量,同时通过标准化的流程确保测试的一致性。
771 0
|
Java 数据库连接 数据库
Request 和 Response详解(下)
Request 和 Response详解(下)
286 1
|
安全 Java 测试技术
springboot @Transactional的概念以及实战
【4月更文挑战第25天】在Spring Boot中,@Transactional注解是用来声明一个方法或类中所有公共方法的事务边界。这个注解主要由Spring框架提供的声明式事务管理机制支持。使用@Transactional可以极大简化事务管理的复杂性,确保数据的一致性和完整性。
221 0
|
机器学习/深度学习 分布式计算 监控
典型的Spark应用实例
典型的Spark应用实例
653 1