arraylist扩容_Java程序员必知:ArrayList解析

首先看ArrayList实现了 List ,RandomAccess , Cloneable , java.io.Serializable

其中的RandomAccess 代表其拥有随机快速访问的能力
因为其底层数据结构是数组,是占据一块连续的内存空间,所以其空间效率不高,但是可以根据下标读写(改查)元素,时间效率很高,当集合中的元素超出容量会进行扩容操作,新容量=旧容量*1.5
arraylist需要8字节来存储自己的信息,所以最大的容量就是 Integer.MAX_VALUE-8
下面来看代码,首先是构造函数
构造函数
构造函数可以指定容量也可不指定,如果不指定容量则默认返回一个空数组,在添加的时候会判断如果是空数组会默认容量大小为10 。6215e486a44a03657c05e9b582d7ba5a.png

如果是自定义容量就会做一些判断,判断是否大于0,是否=0,超出最大值就设为最大值

c71c152d75564ead1c8697fed6e1a356.png

添加

add()

直接添加元素(序号的顺序并不是执行的顺序,而是代表不同的方法,具体顺序看方法调用的顺序)

ab92c6a46e16198ab92669950673e6b1.png

add(int index,E element)

941ffa7ef45627f493568235b6acd1d2.png

addAll(Collection extends E>c)

d170fe7f7480e038cf5acbcb0444e40b.png

addAll(int index, Collection extends E> c)

b2af54ed5a6f354b617d49cae4eabcb4.png

总结:
add、addAll。
先判断是否越界,是否需要扩容。
如果扩容, 就复制数组。
然后设置对应下标元素值。

值得注意的是:
1 如果需要扩容的话,默认扩容一半。如果扩容一半不够,就用目标的size作为扩容后的容量。
2 在扩容成功后,会修改modCount

删除

按索引删除元素

3d0005b9f44fa690dfc227a6d3e09d84.png

按元素内容删除f2a7ade3682d4e0f48e8e4dc6bfe4aa0.png

批量删除8b299c1d23c615d1ec59d416733b660d.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值