阿华代码,不是逆风,就是我疯,希望本文内容能帮到你!你们的点赞收藏是我前进最大的动力!!
目录
阿华代码解读,不是逆风就是你疯
HashMap 和TreeMap都继承于Map,Map是一个接口在实现这个接口的时候,需要实例化TreeMap或者HashMap。
HashMap中一些成员变量的认识:
编辑
默认哈希桶的大小为16(左移运算,左移4位)
编辑默认负载因子
、
编辑链表长度
编辑数组长度
这两者当链表长度超过8,数组长度超过64的时候,进行树化
编辑
解树化:就是链表删除节点删呀删呀删,删到只剩6个节点的时候,就把它当做链表,不要当成红黑树
编辑
Node节点实现Map.Entry接口,每一个节点就是一个Entry
编辑
HashMap中的构造方法
HashMap有四个构造方法,这里举例带两个参数的构造方法,initialCapacity是指定容量,loadFactor是指定负载因子,如果initialCapacity<0,抛出异常
编辑
用带有一个参数的构造方法,会调用带有两个参数的构造(红线处this,给默认的DEFAULT_LOAD_FACTOR)
编辑
调用无参的构造方法时,会发现只初始化了默认容量,loadFactor,数组大小并没有分配,实际在第一次put的时候会分配一个大小长度为16的数组
put方法
编辑
put方法里面 先进hash方法 再进putVal方法
hash方法
编辑
putVal方法
补充:异或完得到更为均匀的数字
编辑
进resize
(复杂,一定记得我们给的初始条件都是基于调用不带参数的构造方法)
编辑
不进resize方法
,继续往下走,如果插入的位置为null,那么直接插入,若为null那就用尾插法(else语句)
编辑
tableSizeFor
确定n的大小,在tableSizeFor中实现
编辑
编辑
不进resize继续走
编辑
treeifyBin
编辑
此文章只浅解读了HashMap中的put过程,后续还有补充再进行修改,如有错误,还请多多指教