集合
说一下HashMap的实现原理?
HashMap实现原理 HashMap的数据结构:底层使用hash表数据结构,即数组和链表或红黑树 1.当我们往HashMap中put元素时,利用key的hashCode重新hash计算出当前对象的元素在数组中的下标 2.存储时,如果出现hash值相同的key,此时有两种情况。 a.如果key相同,则覆盖原始值; b.如果key不同(出现冲突),则将当前的key-value放入链表或红黑树中(链表的长度大于8且数组长度大于64转换为红黑树) 3.获取时,直接找到hash值对应的下标,在进一步判断key是否相同,从而找到对应值。 HashMap的jdk1.7和jdk1.8有什么区别 ✔ JDK1.8之前采用的是拉链法。拉链法:将链表和数组相结合。也就是说创建一个链表数组,数组中每一格就是一个链表。若遇到哈希冲突,则将冲突的值加到链表中即可。 ✔ JDK1.8在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时并且数组长度达到64时,将链表转化为红黑树,以减少搜索时间。扩容resize()时,红黑树拆分成的树的结点数小于等于临界值6个,则退化成链表。
1.说一下HashMap的实现原理? ✔ 底层使用hash表数据结构,即数组+(链表|红黑树) ✔ 添加数据时,计算key的值确定元素在数组中的下标 ✔ key相同则替换不同则存入链表或红黑树中 ✔ 获取数据通过key的hash计算数组下标获取元素 2.HashMap的jdk1.7和jdk1.8有什么区别 ✔ JDK1.8之前采用的拉链法,数组+链表 ✔ JDK1.8之后采用数组+链表+红黑树,链表长度大于8且数组长度大于64则会从链表转化为红黑树(红黑树节点数 <= 6的时候退化成链表)