HashSet 的实现原理?(已更新)
答:
-
HashSet 的父类接口是Set集合
-
HashSet 是以Hash表结构存储
-
HashSet 多线程不安全
-
HashMap 可以存null值,
-
HashSet的底层是用HashMap实现的,将HashMap 值的那一列隐藏,就是HashSet (存在键的那一列)
-
一般子类需要用到HashCode方法,并且进行重写。
例:String重写HashCode方法,只要是数据内容一样,返回的hashCode值就是一样("abc");如果数据不一样,但是hashCode值一样,则表示 hash 冲突("通话")。
Hash表结构:
存储
Jdk1.8前 数组+链表
Jdk1.8前 数组+链表/红黑树
释义:
数组:元素分类(当HashCode值相同的时候,分在数组的同一类)
链表:对数组一类中的数据进行连接,初始值为16
红黑树:当数组中挂载的数据在8个或以上时,后面的链表转成红黑树(查询效率高)