Java学习笔记——集合接口实现类的扩容机制

List接口:

ArrayList实现类:
默认容量为10,超出后按照源容量1.5倍+1来扩容,可以指定大小List arrayList = new ArrayList(int n);

grow源码:
在这里插入图片描述
LinkedList实现类:
默认容量为10,没有初始化大小,也没有扩容的机制

Vector实现类:
默认容量为10,超出后按照源容量2倍来扩容(未指定增长步长)

grow源码:
在这里插入图片描述

Set接口:

HashSet实现类:
默认容量16,加载因子0.75,超出后按照1倍扩容

Map接口:

HashMap实现类:
默认容量为空,元素加入时才开辟空间,节省空间,加载因子0.75,超出后按2倍扩容。

put源码:
在这里插入图片描述
(1)
在这里插入图片描述
hash(key)返回哈希值高十六位异或低十六位。
好处:散列均匀,减少散列冲突,提高效率。

(2)
在这里插入图片描述
第一个if语句:判断是否有元素存入,不为空不为0则对table用resize()扩容。tab=16。

第二个if语句:判断(table.length-1的值) & (hash值)的存储位置是否为空,为空放入。

数组长度为2的n次方:避免哈希冲突,提高检索速度。否则多个数据会放入同一个哈希位置,检索速度慢。
在这里插入图片描述

当链表的长度大于8的时候,并且数组长度大于64的时候, 会把链表调整为红黑树,效率提高了,当红黑树的兀素个数小于6的时候,调整为链表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值