完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
ArrayList
ArrayList是java集合框架中比较常用的数据结构了。继承自AbstractList,实现了List接口。底层基于数组实现容量大小动态变化。允许null的存在。同时还实现了RandomAccess、Cloneable、Serializable接口,所以ArrayList是支持快速访问、复制、序列化的。 |
|
|
|
ArrayList的特点
1.ArrayList底层基于数组实现容量大小动态可变。默认初始容量大小为10; 2.扩容机制为首先扩容为原始容量的1.5倍。如果1.5倍太小的话,则将我们所需的容量大小赋值给newCapacity, 3.如果1.5倍太大或者我们需要的容量太大,那就直接拿newCapacity=(minCapacity》MAX_ARRAY_SIZE)?Integer.MAX_VALUE:MAX_ARRAY_SIZE来扩容。 4.扩容之后是通过数组的拷贝来确保元素的准确性的,所以尽可能减少扩容操作。ArrayList的最大存储能力:Integer.MAX_VALUE。size为集合中存储的元素的个数。elementData.length为数组长度,表示最多可以存储多少个元素。5.如果需要边遍历边remove,必须使用iterator。且remove之前必须先next,next之后只能用一次remove。 |
|
|
|
ArrayList的get操作
publicEget(intindex){ rangeCheck(index); returnelementData(index); } 由于ArrayList底层是基于数组实现的,所以获取元素就相当简单了,直接调用数组随机访问即可。 |
|
|
|
ArrayList的add操作
publicbooleanadd(Ee){ ensureCapacityInternal(size+1);//IncrementsmodCount!! elementData[size++]=e; returntrue; } privatevoidensureCapacityInternal(intminCapacity){ if(elementData==DEFAULTCAPACITY_EMPTY_ELEMENTDATA){ minCapacity=Math.max(DEFAULT_CAPACITY,minCapacity); } ensureExplicitCapacity(minCapacity); } privatevoidensureExplicitCapacity(intminCapacity){ modCount++; //overflow-consciouscode if(minCapacity-elementData.length》0) grow(minCapacity); } 由此可见:每次添加元素到集合中时都会先确认下集合容量大小。然后将size自增1。ensureCapacityInternal函数中判断如果elementData=DEFAULTCAPACITY_EMPTY_ELEMENTDATA就取DEFAULT_CAPACITY和minCapacity的最大值也就是10。这就是EMPTY_ELEMENTDATA与DEFAULTCAPACITY_EMPTY_ELEMENTDATA的区别所在。同时也验证了上面的说法:使用无惨构造函数时是在第一次添加元素时初始化容量为10的。ensureExplicitCapacity中对modCount自增1,记录操作次数,然后如果minCapacity大于elementData的长度,则对集合进行扩容。显然第一次添加元素时elementData的长度为零。那我们来看看grow函数。 privatevoidgrow(intminCapacity){ //overflow-consciouscode intoldCapacity=elementData.length; intnewCapacity=oldCapacity+(oldCapacity》》1); if(newCapacity-minCapacity《0) newCapacity=minCapacity; if(newCapacity-MAX_ARRAY_SIZE》0) newCapacity=hugeCapacity(minCapacity); //minCapacityisusuallyclosetosize,sothisisawin: elementData=Arrays.copyOf(elementData,newCapacity); } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
“0元购”智元灵犀X1机器人,软硬件全套图纸和代码全公开!资料免费下载!
1090 浏览 1 评论
963 浏览 0 评论
【实操文档】在智能硬件的大模型语音交互流程中接入RAG知识库
5776 浏览 1 评论
防止AI大模型被黑客病毒入侵控制(原创)聆思大模型AI开发套件评测4
989 浏览 0 评论
不可错过!人工神经网络算法、PID算法、Python人工智能学习等资料包分享(附源代码)
3280 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 12:24 , Processed in 0.649013 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号