当我们首次调用 HashMap
的 put()
方法存数据时,如果发现 table
为 null
,则会调用 resize()
去初始化 table
,具体逻辑在 putVal()
方法中。
在 resize()
方法中,调整了最终 threshold
值,以及完成了 table
的初始化。
因为 resize()
还糅合了动态扩容的逻辑,所以我将初始化 table
的逻辑用注释标记出来了。其中 xxxCap
和 xxxThr
分别对应了 table
的容量
和动态扩容
的阈值
,所以存在旧
和新
两组数据。
当我们指定了初始容量,且 table
未被初始化时,oldThr
就不为 0
,则会走到代码 ①
的逻辑。在其中将 newCap
赋值为 oldThr
,也就是新