简单谈谈对ArrayList集合的理解

本文介绍了ArrayList集合,其底层是数组结构,有序且可重复,非线程安全。实例化时无参构造在首次添加才创建数组,添加时会判断并扩容,扩容机制为原长加原长右移一位。删除是元素左移,还提及最大值及Fast - fail机制。

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

ArrayList集合底层为数组式结构,所以是有序的集合并且可以重复,可以根据下标进行取值,是非线程安全的。

 

ArrayList集合在调用无参构造方法实例化的时候,并没有创建数组,而是在用户第一次执行添加的时候进行创建数组,ArrayList的添加方法,先进行判断数组是否已创建,如果没创建先创建数组,然后调用扩容方法grow,将数组当前的长度+1的值一并传到grow方法中,ArrayList扩容机制为装满就扩容, 扩容大小为    原长+(原长 >> 1)   网上有很多文章都是说乘1.5+1,这其实是不正确的

扩容时新建一个扩容后的新数组 然后把旧数组里的值复制到新的数组里,复制方法是通过c语言实现,效率较高。最后在根据下标进行添加。

删除方法:根据下标进行删除,将下标往后的元素复制,从原下标位置开始依次进行粘贴,将原数组最后一位赋值为null,实际上删除操作就是将数组元素从要被删除数组的下标+1的位置开始向下标位依次左移。

最大值:integer最大值-8

Fast-fail机制检测bug    modCount

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值