说一下HashMap的实现原理?(已更新)
答:
-
HashSet 是以Hash表结构存储
-
可以存null键、null值
-
HashMap 储存的是Jdk中提供的类型的键,可以保证唯一性;HashMap 储存的是自定义的键,无法保证唯一性(哈希冲突),见以下:
-
一般子类需要用到HashCode方法,并且进行重写。
例:String重写HashCode方法,只要是数据内容一样,返回的hashCode值就是一样("abc");如果数据不一样,但是hashCode值一样,则表示 hash 冲突("通话")。
Hash表结构:
存储
Jdk1.8前 数组+链表
Jdk1.8前 数组+链表/红黑树
释义:
数组:元素分类(当HashCode值相同的时候,分在数组的同一类)
链表:对数组一类中的数据进行连接,初始值为16
红黑树:当数组中挂载的数据在8个或以上时,后面的链表转成红黑树(查询效率高)