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

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

起因

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

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

描述示例

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

原因分析

HashSet去重原理

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

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


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

解决问题

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

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

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


目录
相关文章
|
7月前
|
安全 Java
【面试】Java集合中List,Set以及Map等集合体系详解
【面试】Java集合中List,Set以及Map等集合体系详解
32 0
|
6月前
|
存储 Java
ArrayList去重
ArrayList去重
|
8月前
|
存储 Java 程序员
Java集合List介绍和去重方案
Java集合List介绍和去重方案
70 0
|
安全 小程序 Java
面试官:怎么删除 HashMap 中的元素?我一行代码搞定,赶紧拿去用!
面试官:怎么删除 HashMap 中的元素?我一行代码搞定,赶紧拿去用!
186 0
HashMap,你是怎么做到的Key重复?
HashMap,你是怎么做到的Key重复?
|
存储 安全 Java
ArrayList集合底层原理
ArrayList集合底层原理
Java集合相关学习——如何实现List集合的去重操作?
Java集合相关学习——如何实现List集合的去重操作?
Java集合相关学习——如何实现List集合的去重操作?
|
存储 安全 Java
面试:在面试中关于List(ArrayList、LinkedList)集合会怎么问呢?你该如何回答呢?
在一开始基础面的时候,很多面试官可能会问List集合一些基础知识,
106 0
面试:在面试中关于List(ArrayList、LinkedList)集合会怎么问呢?你该如何回答呢?
|
Java
Java - 两个 List 合并后去重 & 单个 List 去重
Java - 两个 List 合并后去重 & 单个 List 去重
1029 0