ArrayList的实现原理

ArrayList的实现原理

ID:37708343

大小:22.67 KB

页数:5页

时间:2019-05-29

ArrayList的实现原理_第1页
ArrayList的实现原理_第2页
ArrayList的实现原理_第3页
ArrayList的实现原理_第4页
ArrayList的实现原理_第5页
资源描述:

《ArrayList的实现原理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.ArrayList概述:ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括null在内的所有元素。除了实现List接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。自动增长会带来数据向新数组的重新拷贝,因此,如果可预知数据量的多少,可在构造ArrayList时指定其容量。在添加大量元素前,应用程序也可以使用ensureCapacity操作来增加ArrayList实例的容量,这可

2、以减少递增式再分配的数量。注意,此实现不是同步的。如果多个线程同时访问一个ArrayList实例,而其中至少一个线程从结构上修改了列表,那么它必须保持外部同步。2.ArrayList的实现:对于ArrayList而言,它实现List接口、底层使用数组保存所有元素。其操作基本上是对数组的操作。下面我们来分析ArrayList的源代码:1)底层使用数组实现:Java代码privatetransientObject[]elementData;2)构造方法:ArrayList提供了三种方式的构造器,可以构造一个默认初始容量为10的空列表、构造一个指定初始容量的空列表以及构造一个包含指定colle

3、ction的元素的列表,这些元素按照该collection的迭代器返回它们的顺序排列的。Java代码publicArrayList(){this(10);}publicArrayList(intinitialCapacity){super();if(initialCapacity<0)thrownewIllegalArgumentException("IllegalCapacity:"+initialCapacity);this.elementData=newObject[initialCapacity];}publicArrayList(Collectionc){

4、elementData=c.toArray();size=elementData.length;//c.toArraymight(incorrectly)notreturnObject[](see6260652)if(elementData.getClass()!=Object[].class)elementData=Arrays.copyOf(elementData,size,Object[].class);}3)存储:ArrayList提供了set(intindex,Eelement)、add(Ee)、add(intindex,Eelement)、addAll(Collection<

5、?extendsE>c)、addAll(intindex,Collectionc)这些添加元素的方法。下面我们一一讲解://用指定的元素替代此列表中指定位置上的元素,并返回以前位于该位置上的元素。publicEset(intindex,Eelement){RangeCheck(index);EoldValue=(E)elementData[index];elementData[index]=element;returnoldValue;}//将指定的元素添加到此列表的尾部。publicbooleanadd(Ee){ensureCapacity(size+1);ele

6、mentData[size++]=e;returntrue;}//将指定的元素插入此列表中的指定位置。//如果当前位置有元素,则向右移动当前位于该位置的元素以及所有后续元素(将其索引加1)。publicvoidadd(intindex,Eelement){if(index>size

7、

8、index<0)thrownewIndexOutOfBoundsException("Index:"+index+",Size:"+size);//如果数组长度不足,将进行扩容。ensureCapacity(size+1);//IncrementsmodCount!!//将elementData中从Inde

9、x位置开始、长度为size-index的元素,//拷贝到从下标为index+1位置开始的新的elementData数组中。//即将当前位于该位置的元素以及所有后续元素右移一个位置。System.arraycopy(elementData,index,elementData,index+1,size-index);elementData[index]=element;size++;}//按照指定collection的迭代器所返回的元素

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。