这两天在看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对象存储。