起因
公司有个搜索需求需要实现,根据用户输入的关键词展示相对应的数据
因为不需要进行排序,所以博主这里使用了HashSet去重 但是没有去重成功,看了很久的代码,后来发现是因为…
描述示例
下图代码博主已经添加了HashSet,但是运行起来依然有好几个“一年级六班 赵六”,显然这并没有去重成功,那么这是什么原因呢?
原因分析
HashSet去重原理
HashSet是通过hashCode和equals两方法保证数据的唯一性的,如果hashCode相同才判断元素的equals;因为我这里添加的是对象,且对象有多个值,那么我们需要让HashSet认为这两个是同一个对象,我们在向集合中存储数据,首先是要判断哈希值的
说到这,想必不少人已经猜出来具体原因了吧,既然知道原因了,那就开始解决问题
说到这,想必不少人已经猜出来具体原因了吧,既然知道原因了,那就开始解决问题
解决问题
如果不重写hashCode方法和equal方法,那么属性值重复的对象都是可以添加成功的
(左图为原数据类,可以看到是没有重写equals和hashCode方法的,中图为重写equals和hashCode后的数据类,右图为运行结果)
可以看到重写equals和hashCode方法后,成功去重了