欢迎来到天天文库
浏览记录
ID:30782851
大小:119.53 KB
页数:11页
时间:2019-01-03
《【java集合源码剖析】arraylist源码剖析-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、【Java集合源码剖析】ArrayList源码剖析-编程开发技术【Java集合源码剖析】ArrayList源码剖析原文出处:兰亭风雨ArrayList简介ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态増长内存oArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List1)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包下的CopyOnWriteArra
2、yList类。ArrayList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了RemdomAccess接口,支持快速随机访问,实际上就是通过下标序号进行快速访问,实现了Clonceiblc接口,能被克隆。ArrayList源码剖析ArrayList的源码如下(加入了比较详细的注释):packagejava,util;publicclassArrayListextendsAbstractListimplementsList,RandomAccess,Cloneable,jav
3、a.io.Serializable{//序列版本号privatestaticfinallongserialVersionlllD=8683452581122892189L;//ArrayList基于该数组实现,用该数组保存数据privatetransientObject[]elementData;//ArrayList屮实际数据的数量privateintsize;//ArrayList带容量大小的构造函数。publicArrayList(intinitialCeipEicity){super();if(initialcapa
4、city<0)thrownewIIlegalArgumentException("IllegalCapacity:〃+initialCapacity);//新建一个数组this.elementData=newObject[initialCapacity];}//ArrayList无参构造函数。默认容量是10。publicArrayList(){this(10);}//创建一个包含collection的ArrayListpublicArrayList(Collcctionc){elementData=c.
5、toArray();size二elementData.length;if(elementData.getClass()!二Object[].class)elementData=Arrays.copyOf(elementData,size,Object[].class);}//将当前容量值设为实际元素个数publicvoidtrimToSize(){modCount++;intoldCapacity=elementData.length;if(size6、f(elementData,size);}}//确定ArrarList的容量。//若ArrayList的容量不足以容纳当前的全部元素,设置新的容量二“(原始容量x3)/2+1”publicvoidensureCapacity(intminCapacity){//将“修改统计数”+1,该变量主要是用来实现fail-fast机制的modCount++;intoldCapacity=elementData.length;//若当前容量不足以容纳当前的元素个数,设置新的容量二“(原始容量x3)/2+1”if(minCapacity>7、oldCapacity){ObjectoldData[]=elementData;intnewCapacity=(oldCapacity*3)/2+1;//如呆还不够,则直接将minCapacity设置为当前容量if(newCapacity8、city(size+1);//IncrementsmodCount!!//添加e到ArrayList中elernentData[size++]=e;returntrue;}//返冋ArrayList的实际大小publicintsize(){returnsize;}//ArrayList是否
6、f(elementData,size);}}//确定ArrarList的容量。//若ArrayList的容量不足以容纳当前的全部元素,设置新的容量二“(原始容量x3)/2+1”publicvoidensureCapacity(intminCapacity){//将“修改统计数”+1,该变量主要是用来实现fail-fast机制的modCount++;intoldCapacity=elementData.length;//若当前容量不足以容纳当前的元素个数,设置新的容量二“(原始容量x3)/2+1”if(minCapacity>
7、oldCapacity){ObjectoldData[]=elementData;intnewCapacity=(oldCapacity*3)/2+1;//如呆还不够,则直接将minCapacity设置为当前容量if(newCapacity8、city(size+1);//IncrementsmodCount!!//添加e到ArrayList中elernentData[size++]=e;returntrue;}//返冋ArrayList的实际大小publicintsize(){returnsize;}//ArrayList是否
8、city(size+1);//IncrementsmodCount!!//添加e到ArrayList中elernentData[size++]=e;returntrue;}//返冋ArrayList的实际大小publicintsize(){returnsize;}//ArrayList是否
此文档下载收益归作者所有