2 qq 36343694 qq_36343694 于 2017.08.31 11:15 提问

关于jdk1.8 ConcurrentHashMap源码 get方法的问题

最近我在看 ConcurrentHashMap源码的时候,看到get()方法(源码如下图所示),其中有一条判断语句 eh < 0 , 因为 ForwardingNode和TreeBin的hash为-1和-2,所以会走这条判断语句,然后执行 return (p = e.find(h, key)) != null ? p.val : null; 如果不满足该条件则说明该节点不是头结点并且hash >= 0,往下执行while()循环。
我的疑问就是,Node、ForwardingNode和TreeBin都实现了find(),那为什么get()还需要做eh < 0的判断呢,直接 return (p = e.find(h, key)) != null ? p.val : null; 不就好了,根据e的类型执行各自的find()?,该判断和while()循环存在的道理是什么呢?

图片说明

Csdn user default icon
上传中...
上传图片
插入图片