HashMap实现原理
HashMap的数组结构
底层使用hash表数据结构,即数组和链表或红黑树
当前对象的元素在数组中的下标
2,储存时,如果出现hash值相同的key,会有两种情况
a.如果key相同,则覆盖原始值 比入第一次存储的key是name第二次还是name,那么第二个会去覆盖第一次的value值
b.如果key不同(出现冲突的话),则将当前的key-value放入到链表或者红黑树中(链表的长度大于8,且数组长度大于64转换为红黑树)
3,获取数据时,直接找到hash值对应的下标,再进一步判断key是否相等,从而找到对应值。
如果是链表需要遍历链表,如果是红黑树需要去红黑树查找对应的值
jdk1.7和1.8有什么区别
jdk1.8之前采用的是拉链法。(也就是创建一个链表数组,数组中的每一格就是一个链表,如有hash冲突,则将冲突的值加到链表中)jdk1.8在解决hash冲突是有变化,当链表长度大于8时并且长度达到64时将链表转化为红黑树用来减少搜索时间,扩容时,红黑树拆分成树的结点数小于等于临界值6个,则退化成6链表