您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > JAVAVector源码解析和示例代码
JAVAVector源码解析和示例代码本文的学习方式是先对JAVAVector有个整体认识,然后再学习它的源码,最后再通过实例来学会使用。第1部分Vector介绍Vector是矢量队列,它是JDK1.0版本添加的类。继承于AbstractList,实现了List,RandomAccess,Cloneable这些接口。Vector继承了AbstractList,实现了List;所以,它是一个队列,支持相关的添加、删除、修改、遍历等功能。Vector实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在Vector中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。Vector实现了Cloneable接口,即实现clone()函数。它能被克隆。和ArrayList不同,Vector中的操作是线程安全的;但是,Vector不支持序列化,即没有实现java.io.Serializable接口。Vector的继承关系Vector与Collection关系如下图:Vector的构造函数复制代码代码如下:Vector共有4个构造函数//默认构造函数Vector()//capacity是Vector的默认容量大小。当由于增加数据导致容量增加时,每次容量会增加一倍。Vector(intcapacity)//capacity是Vector的默认容量大小,capacityIncrement是每次Vector容量增加时的增量值。Vector(intcapacity,intcapacityIncrement)//创建一个包含collection的VectorVector(Collection?extendsEcollection)Vector的API复制代码代码如下:synchronizedbooleanadd(Eobject)voidadd(intlocation,Eobject)synchronizedbooleanaddAll(Collection?extendsEcollection)synchronizedbooleanaddAll(intlocation,Collection?extendsEcollection)synchronizedvoidaddElement(Eobject)synchronizedintcapacity()voidclear()synchronizedObjectclone()booleancontains(Objectobject)synchronizedbooleancontainsAll(Collection?collection)synchronizedvoidcopyInto(Object[]elements)synchronizedEelementAt(intlocation)EnumerationEelements()synchronizedvoidensureCapacity(intminimumCapacity)synchronizedbooleanequals(Objectobject)synchronizedEfirstElement()Eget(intlocation)synchronizedinthashCode()synchronizedintindexOf(Objectobject,intlocation)intindexOf(Objectobject)synchronizedvoidinsertElementAt(Eobject,intlocation)synchronizedbooleanisEmpty()synchronizedElastElement()synchronizedintlastIndexOf(Objectobject,intlocation)synchronizedintlastIndexOf(Objectobject)synchronizedEremove(intlocation)booleanremove(Objectobject)synchronizedbooleanremoveAll(Collection?collection)synchronizedvoidremoveAllElements()synchronizedbooleanremoveElement(Objectobject)synchronizedvoidremoveElementAt(intlocation)synchronizedbooleanretainAll(Collection?collection)synchronizedEset(intlocation,Eobject)synchronizedvoidsetElementAt(Eobject,intlocation)synchronizedvoidsetSize(intlength)synchronizedintsize()synchronizedListEsubList(intstart,intend)synchronizedTT[]toArray(T[]contents)synchronizedObject[]toArray()synchronizedStringtoString()synchronizedvoidtrimToSize()第2部分Vector源码解析为了更了解Vector的原理,下面对Vector源码代码作出分析。复制代码代码如下:packagejava.util;publicclassVectorEextendsAbstractListEimplementsListE,RandomAccess,Cloneable,java.io.Serializable{//保存Vector中数据的数组protectedObject[]elementData;//实际数据的数量protectedintelementCount;//容量增长系数protectedintcapacityIncrement;//Vector的序列版本号privatestaticfinallongserialVersionUID=-2767605614048989439L;//Vector构造函数。默认容量是10。publicVector(){this(10);}//指定Vector容量大小的构造函数publicVector(intinitialCapacity){this(initialCapacity,0);}//指定Vector容量大小和增长系数的构造函数publicVector(intinitialCapacity,intcapacityIncrement){super();if(initialCapacity0)thrownewIllegalArgumentException(IllegalCapacity:+initialCapacity);//新建一个数组,数组容量是initialCapacitythis.elementData=newObject[initialCapacity];//设置容量增长系数this.capacityIncrement=capacityIncrement;}//指定集合的Vector构造函数。publicVector(Collection?extendsEc){//获取“集合(c)”的数组,并将其赋值给elementDataelementData=c.toArray();//设置数组长度elementCount=elementData.length;//c.toArraymight(incorrectly)notreturnObject[](see6260652)if(elementData.getClass()!=Object[].class)elementData=Arrays.copyOf(elementData,elementCount,Object[].class);}//将数组Vector的全部元素都拷贝到数组anArray中publicsynchronizedvoidcopyInto(Object[]anArray){System.arraycopy(elementData,0,anArray,0,elementCount);}//将当前容量值设为=实际元素个数publicsynchronizedvoidtrimToSize(){modCount++;intoldCapacity=elementData.length;if(elementCountoldCapacity){elementData=Arrays.copyOf(elementData,elementCount);}}//确认“Vector容量”的帮助函数privatevoidensureCapacityHelper(intminCapacity){intoldCapacity=elementData.length;//当Vector的容量不足以容纳当前的全部元素,增加容量大小。//若容量增量系数0(即capacityIncrement0),则将容量增大当capacityIncrement//否则,将容量增大一倍。if(minCapacityoldCapacity){Object[]oldData=elementData;intnewCapacity=(capacityIncrement0)?(oldCapacity+capacityIncrement):(oldCapacity*2);if(newCapacityminCapacity){newCapacity=minCapacity;}elementData=Arrays.copyOf(elementData,newCapacity);}}//确定Vector的容量。publicsynchronizedvoidensureCapacity(intminCapacity){//将Vector的改变统计数+1modCount++;ensureCapacityHelper(minCapacity);}//设置容量值为newSizepublicsynchronizedvoidsetSize(intnewSize){modCount++;if(newSizeelementCount){//若newSize大于Vector容量,则调整Vector的大小。ensureCapacityHelper(newSize);}else{//若newSize小于/等于Vector容量,则将newSize位置开始的元素都设置为nullfor(inti=newSize;ielementCount;i++){elementData[i]=null;}}elementCount=newSize;}//返回“Vector的总的容量”publicsynchronizedintcapacity(){returnelementData.length;}//返回“Vector的实际大小”,即Vector中元素个数publicsynchronizedintsize(){returnelementCount;}//判断Vector是否为空publicsynchronizedbooleanisEmpty(){returnelementCount==0;}//返回“Vector中全部元素对应的Enumeration”publicEnumerationEelements(){//通过匿名类实现EnumerationreturnnewEnumerationE(){intcount=0;//是否存在下一个元素publicbooleanhasMoreElements(){returncountelementCount;}//获取下一个元素p
本文标题:JAVAVector源码解析和示例代码
链接地址:https://www.777doc.com/doc-2880473 .html