1.前言
关于1.7版本hashMap形成环的原因网上有很多说明,无非就是a指向b,二次循环b指向a,形成环了。但是形成过程真的是众说纷纭,眼花缭乱,各有各的说法(wtf!!!)在此,我将按照源码的方式将形成环的过程好好梳理一番。
2.形成环的过程
2.1 环嘛,当然是在resize的时候形成的,否则你一直插插插(put)最多也就是数据出错的问题,在此不解释
2.2 先看resize方法,如下图
没什么好说的,创建了一个2倍大小的newTable,然后在transfar里对它进行修改,把原来的table指向这个新的table
2.3 实际进行resize操作的transfar方法,如下图:
看起来是不是很简单,两个循环而已,但是里面有大大的坑,接下来我会举例说明:
假设有如下一个HasMap,就两个下标0和1,table[0]为null,table[1]存key=3的entry对象,因为entry对象有next标记,所以可以通过next标记找到下一个key=