ArrayList,LinkedList,HashMap,初始化容量和扩容机制

1.ArrayList

Object[] 数组实现,默认大小为 10(底层先创建了一个长度为0的数组,当添加第一个元素的时候,初始化容量为10),支持随机访问,连续内存空间,插入末尾时间复杂 度 o(1),插入第 i 个位置时间复杂度 o(n - i)。扩容,大小变为 1.5 倍,Arrays.copyOf(底层 System.ArrayCopy),复制到新数组,指针指向新数组。

2.LinkedList

基于链表实现,1.7 为双向链表,1.6 为双向循环链表,取消循环更能分清头尾。它没有扩容机制,每次在头尾添加元素。

3.HashMap

底层数据结构,JDK 1.8是数组+链表+红黑树,JDK1.7无红黑树。链表长度大于8时,转化为红黑树,优化查询效率。 初始容量为 16,通过 tableSizeFor 保证容量为 2 的幂次方。寻址方式,高位异或,(n-1)&h取模,优化速度。 扩容机制,当元素数量大于容量 x 负载因子 0.75 时,容量扩大为原来的 2 倍,新建一个数组,然后转移到新数组。 基于Map实现。线程不安全。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值