ArrayList,Vector,HashMap的扩容区别

本文探讨了ArrayList, Vector和HashMap在扩容时的区别。ArrayList默认扩容为1.5倍,初始容量为0(首次add后变为10)。Vector初始容量为10,扩容时若指定扩展容量则按旧容量+扩展容量,否则为2倍旧容量。HashMap初始容量为0(首次put后变为16),门限为12,当旧容量大于等于2^30时不扩容,否则新容量为2倍旧容量,新门限为旧门限的2倍。在JDK1.8中,新元素插入链表尾部,而在JDK1.7中插入头部。" 125509071,9157325,转转用例平台脑图组件2.0:React实现与优化,"['react.js', '前端', '测试用例', '测试工具', '前端框架']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ArrayList不可以设置扩展的容量,默认1.5倍(add时,当前元素个数+1如果大于当前容量则进行扩容)
Vector可以设置扩展的容量,如果设置扩展容量则新容量=旧容量+扩展容量,如果没有设置,新容量=旧容量的2倍(可在Vector的构造函数中设置扩展的容量)


ArrayList的无参构造方法中初始容量为0(初次调用add()会更新为10)
Vector的无参构造方法中初始容量为10

HashMap的无参构造方法中初始容量为0(初次调用put()会更新为16,门限会更新为12=16*0.75)

HashMap扩容时,如果旧容量大于等于最大容量(2^30),则不扩容,设置新的门限=2^31 -1;反之新容量=旧容量的2倍,新门限=旧门限的2倍

下图中,jdk1.8的HashMap结构,新元素14是添加在链表结尾,不是链表头部;jdk1.7中新元素14是添加在链表头部(14->6->10)

以上基于jdk1.8

更多可见:ArrayList,LinkedList,Vector的区别

HashMap 1.8 源码解析-数组+链表/红黑树

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二十六画生的博客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值