构造方法的时候并不曾初步化,构造方法的时候并不曾开始化

澳门永利备用网址 1

澳门永利备用网址 2

JDK1.第88中学的HashMap完结跟JDK1.7中的完成有非常大距离。上面分析JDK1.第88中学的完毕,首要看put和get方法。

JDK1.第88中学的HashMap完结跟JDK1.7中的达成有一点都不小差距。下边分析JDK1.第88中学的落成,首要看put和get方法。

澳门永利备用网址 3

澳门永利备用网址 4

澳门永利备用网址 5

澳门永利备用网址 6

构造方法的时候并不曾起始化,而是在率先次put的时候初步化

构造方法的时候并不曾开端化,而是在率先次put的时候初步化

澳门永利备用网址 7

澳门永利备用网址 8

putVal方法的重中之重逻辑是那样的:

putVal方法的要紧逻辑是那般的:

① 、假若数组还未曾初步化(数CEO度是0),则先开始化

一 、假若数组还并未开始化(数COO度是0),则先开始化

贰 、通过hash方法总结key的hash值,进而总结得到应有放置到数组的岗位

贰 、通过hash方法总括key的hash值,进而总括获得应该放置到数组的岗位

三 、假如该职位为空,则平昔放置此处

三 、要是该职责为空,则一直放置此处

肆 、倘若该岗位不为空,而且成分是红黑树,则插入到中间

四 、要是该地点不为空,而且成分是红黑树,则插入到中间

伍 、借使是链表,则遍历链表,若是找到相等的成分则替换,不然插入到链表底部

⑤ 、假诺是链表,则遍历链表,假使找到相等的要素则替换,不然插入到链表底部

⑥ 、如若链表的尺寸超过或等于8,则将链表转成红黑树

⑥ 、假若链表的长短当先或等于8,则将链表转成红黑树

澳门永利备用网址 9

澳门永利备用网址 10

1、计算hash求位置

1、计算hash求位置

二 、看率先个要素是或不是要找的,是则赶回,不然遍历

② 、看率先个要素是否要找的,是则赶回,不然遍历

澳门永利备用网址 11

澳门永利备用网址 12

扩容正是将旧数组的成分移动到新数组

扩大容积正是将旧数组的成分移动到新数组

 

 

总结:

总结:

① 、HashMap底层是用数组+双向链表+红黑树完毕的

一 、HashMap底层是用数组+双向链表+红黑树达成的

二 、插入成分的时候,首先通过二个hash方法总括获得key的哈希值,进而计算出待插入的地点

② 、插入成分的时候,首先通过2个hash方法计算得到key的哈希值,进而计算出待插入的职分

三 、假诺该地点为空,则直接插入(包装成Node)

叁 、假使该地方为空,则直接插入(包装成Node)

肆 、若是该地点有值,则相继遍历。相比的规则是,hash值相同,key值相等的要素正是等同,则用新值替换旧值并回到旧值。

肆 、假如该职位有值,则相继遍历。相比的平整是,hash值相同,key值相等的成分正是等同,则用新值替换旧值并重回旧值。

五 、如若该职位的成分是红黑树结构,则同理,查找,找到则替换,没找到则插入。

伍 、假诺该地点的要素是红黑树结构,则同理,查找,找到则替换,没找到则插入。

 

 

划重点:

划重点:

JDK1.第88中学HashMap与JDK1.7中有成都百货上千地点不平等

JDK1.8中HashMap与JDK1.7中有好多地方不雷同

壹 、1.第88中学引入了红黑树,而1.7中从未

一 、1.第88中学引入了红黑树,而1.7中尚无

贰 、1.第88中学因素是插在链表的尾巴,而1.7中新成分是插在链表的底部

澳门永利备用网址,② 、1.第88中学因素是插在链表的尾巴,而1.7中新成分是插在链表的底部

三 、扩大体量的时候,1.第88中学不会现出死循环,而1.7中简单并发死循环,而且链表不会倒置

叁 、扩大容积的时候,1.第88中学不会油然则生死循环,而1.7中不难并发死循环,而且链表不会倒置