HashSet 底层是采用 HashMap实现的
JDK1.8版本之前: 哈希表 = 数组+链表
JDK1.8版本之后: 哈希表 = 数组+链表+红黑树(提高查询速度)
原理:
首先存储数据到集合中,先计算元素的哈希值;
将元素进行分组,相同hash值的元素为一组,链表是把相同的Hash值的元素连在了一起;
如果链表的长度超过了8位,那么就会把链表转化为红黑树。
红黑树:
特点:
1. HashSet中不允许存储重复元素
2. HashSet没有索引,不能使用普通for循环遍历
3. HashSet是无序的(意思是存储和取出的顺序不一致)
4. 底层是一个Hash表(又称散列表)
不允许有重复元素的实现原理:前提是存储的元素必须 重写hashCode方法和equals方法
(equals重写前比较的是两个对象的地址值,重写之后比较两个对象的内容)
在添加元素的时候,Set集合在调用add方法的时候,add方法会调用元素的hashCode方法和equals方法,判断元素是否重复
具体例子如下:(图片可能不是很清晰,来源于b站视频截图)
尊重原创,转发请附上链接!
谢谢!