hashmap中两个疑问

来源:10-4 HashMap

我心态好好哒

2019-08-09

1.如下图,第一次访问的时候hashmap是懒加载,put的时候会调用resize进行初始化。
table==null不会走下面红框的逻辑,那么为什么第一次put能够成功呢?没看到第一次有放入的操作。
图片描述

2.如下图,get方法中会判断第一个节点是否树节点,这是合理的。但是调用keySet和entrySet里面的forEach却没有判断是否树化,只做了链表next遍历,这是正常的吗?
图片描述
图片描述

写回答

1回答

翔仔

2019-08-09

同学好,针对第一个问题,你其实可以直接新建个hashmap,然后往里面添加第一个元素,然后在

if ((p = tab[i = (n - 1) & hash]) == null)
    tab[i] = newNode(hash, key, value, null);

设置一个断点,就发现是能进入到里面去的,两个if是分开的,都会去判断并执行

针对第二个问题,是正常的,不管树或者链表,遍历的时候都是当做节点来处理的,具体一句两句说不清楚,同学可以在树化的hashmap里试试遍历调试一下就会清楚些,支持树节点的遍历是一个普适的需求,设计者是考虑在里面了的


0
0

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程