Java中Set集合是如何实现添加元素保证不重复的?
Set集合是一个无序的不可以重复的集合。今天来看一下为什么不可以重复。
Set是一个接口,最常用的实现类就是HashSet,以HashSet为例。
HashSet类实现了Set接口, 其底层其实是包装了一个HashMap去实现的。HashSet采用HashCode算法来存取集合中的元素,因此具有比较好的读取和查找性能。
HashSet 添加元素过程
向 HashSet 添加元素,首先调用元素所在类的 hashCode() 方法,计算元素的哈希值,算出在 hashset 底层数组的存放位置。
判断数组该位置上是否已经有元素。
如果该位置没有其他元素,则元素添加成功。
如果该位置,有其他元素,则比较两个元素的 hash 值是否相同;
如果 hash值不相同,则元素添加成功, 以链表的形式存储;
如果 hash值相同,再用 该类的equal() 方法比较
equal 返回 true, 元素添加失败,替换了该元素
equal 返回false 元素添加成功, 并以链表的节点形式存储