福哥答案2020-01-21:html
jdk1.7读流程:
1.key是否为空值null,若是为空,直接遍历table[0]链表,寻找key==null键。调用的是getForNullKey()方法。以下:
1.1.若是元素个数为0,直接返回null。
1.2.遍历table[0]。
1.3.遍历到了,返回值;没遍历到,返回null。
2.key不为空,获取entry。调用getEntry方法。
2.1.若是元素个数为0,直接返回null。
2.2.计算hash。若是key为null,hash值是0;若是不为0,调用hash()方法。
2.3.计算索引位置。调用indexFor()方法。
2.4.遍历table[索引]。哈希相等,key相等(【==相等】或者【key不为空而且equals()相等】),这种状况就算找到了。
2.5.遍历到了,返回值;没遍历到,返回null。
3.若是entry为空,返回空;若是entry不为空,返回entry的value值。node
jdk1.8读流程:
1.计算哈希。调用hash()方法。
2.调用getNode()方法获取node对象。
2.1.table数组已经初始化,长度大于0,根据hash寻找table中的项也不为空。
2.2.table[索引]中的first元素的key相等,直接返回node;不相等,执行下一步骤2.3。
2.3.若是first元素的next节点存在,继续下一步骤2.4。
2.4.若是first元素是TreeNode,调用getTreeNode()方法。
2.4.1.获取root节点。
2.4.2.调用find方法,获取TreeNode对象。
2.5.若是first元素不是TreeNode,遍历链表。
3.若是node对象为空,直接返回null;若是不为空,返回e.value。数组