HashMap用法

一、构造方法

构造方法有4个。

1、手动声明初始容量及负载因子的构造函数。初容容量的最大值不能超过MAXIMUM_CAPACITY

2、手动声明初始容量的构造函数,负载因子是默认大小。

默认的负载因子是0.75

3、无参的构造函数,会指定默认的负载因子。容量是默认的

static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;

4、参数是map类型的有参构造函数 ,负载因子是默认大小。

二、存值过程

1、首先会对传入的key进行hash计算

2、没有指定长度:

①、执行resize()方法进行初始化。将长度设置为默认的16,阀值设为12。

然后实例化一个Node类型的数组tab。长度是resize()方法返回的结果。

长度:newCap = DEFAULT_INITIAL_CAPACITY;
阀值:newThr = (int)(DEFAULT_LOAD_FACTOR * DEFAULT_INITIAL_CAPACITY);

同时要记录容器中元素的数量,如超过阀值则执行resize()方法进行扩容。扩容后的容器大小是扩容前的2倍。

②、用容器的长度和上述第一步中的hash值进行按位与计算。并使用该结果作为索引从tab数组中取数据。如为空,则直接存入到该索引位置;

如不为空,则判断hash跟key是否都一样,如一样就替换。

如不同,则判断是否是TreeNode类型:

a.是就调用putTreeVal()加入到红黑树中;

b.不是。作为一个链表加入相应的索引位置。如果链表的长度不小于7,则将链表转为红黑树。

以上只是我本人的观点,如有错误,请指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值