热门

最新

红包

立Flag

投票

同城

我的

发布
qq_44713855
Never妥协
5 年前
trueqq_44713855

这两天在看hashMap原理,一直疑惑链表使用的时机到底是什么。。。
刚才看一个博客的时候,忽然间恍然大悟。。记录一下思考的过程
jdk1.7
首先根据put进的key值确定一个hash值,由于hash算法,可能会产生相同的hashcode值,此时就会产生hash冲突。
第一种情况,不产生相同hashcode值时,put进的key,value值直接根据hash值算出来的索引位置存放在entry对象中,这每个entry对象构成了一个table数组。
第二种情况,由相同的key产生相同的hashcode值,则在数组中新的value直接覆盖旧value。
第三种情况,由不同的key产生相同hashcode值,此时,链表就使用到了。entry对象中有一个next指向了链表的下一个节点。
jdk1.8
区别在于第三种情况,当链表的长度大于等于8时将链表转换为红黑树,在jdk1.8中,链表的节点使用Node对象存储,红黑树的节点使用treeNode对象存储。

CSDN App 扫码分享
分享
评论
4
打赏
  • 复制链接
  • 举报
下一条:
2333,我是帘子
立即登录