JavaGuide
JavaGuide copied to clipboard
Map源码解析当中put方法源码解析注释有错误
// 桶中已经存在元素
else {
Node<K,V> e; K k;
// 比较桶中第一个元素(数组中的结点)的hash值相等,key相等
if (p.hash == hash &&
((k = p.key) == key || (key != null && key.equals(k))))
// 将第一个元素赋值给e,用e来记录
e = p;
// hash值不相等,即key不相等;为红黑树结点
else if (p instanceof TreeNode)
// 放入树中
e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);
上面这段代码的“ // hash值不相等,即key不相等;为红黑树结点”这句注释不对,因为put方法走到这个if里面,说明新加入的键值对对象的key的hash值肯定是和数组[i]桶的hash值是相等的,此时已经发生hash碰撞了,只是key.equals(k)不相等。