详解Java中的Vector
Vector实现了AbstractList抽象类和List接口,和ArrayList一样是基于Array存储的
Vector是线程安全的,在大多数方法上存在synchronized关键字
//Vector存放的元素,初始化默认长度为10 protectedObject[]elementData; //元素个数 protectedintelementCount; //每次扩容大小,默认为0 protectedintcapacityIncrement; //构造函数,无指定初始化大小和无扩容大小 publicVector(){ this(10); } //构造函数,指定初始化大小和无扩容大小 publicVector(intinitialCapacity){ this(initialCapacity,0); } //构造函数,指定初始化大小和扩容大小 publicVector(intinitialCapacity,intcapacityIncrement){ super(); if(initialCapacity<0) thrownewIllegalArgumentException("IllegalCapacity:"+ initialCapacity); this.elementData=newObject[initialCapacity]; this.capacityIncrement=capacityIncrement; } //构造函数,Collection集合 publicVector(Collectionc){ elementData=c.toArray(); elementCount=elementData.length; if(elementData.getClass()!=Object[].class) elementData=Arrays.copyOf(elementData,elementCount,Object[].class); } //确保扩容的最小容量 publicsynchronizedvoidensureCapacity(intminCapacity){ if(minCapacity>0){ modCount++; ensureCapacityHelper(minCapacity); } } privatevoidensureCapacityHelper(intminCapacity){ //overflow-consciouscode if(minCapacity-elementData.length>0) grow(minCapacity); } //扩容 privatevoidgrow(intminCapacity){ intoldCapacity=elementData.length; //当扩容大小为0的时候,扩容为原来的2倍 intnewCapacity=oldCapacity+((capacityIncrement>0)? capacityIncrement:oldCapacity); if(newCapacity-minCapacity<0) newCapacity=minCapacity; if(newCapacity-MAX_ARRAY_SIZE>0) newCapacity=hugeCapacity(minCapacity); elementData=Arrays.copyOf(elementData,newCapacity); } privatestaticinthugeCapacity(intminCapacity){ if(minCapacity<0)//overflow thrownewOutOfMemoryError(); return(minCapacity>MAX_ARRAY_SIZE)? Integer.MAX_VALUE: MAX_ARRAY_SIZE; }
- ensureCapacity(intminCapacity)方法确保Vector的最小长度,当扩容2倍小于minCapacity时,扩容到minCapacity大小,minCapacity不能小于0
- 最大长度为2的31次方-1
设置大小
publicsynchronizedvoidsetSize(intnewSize){ modCount++; if(newSize>elementCount){ ensureCapacityHelper(newSize); }else{ for(inti=newSize;i超过大小的被设置为Null
publicsynchronizedvoidcopyInto(Object[]anArray){ System.arraycopy(elementData,0,anArray,0,elementCount); } publicsynchronizedvoidtrimToSize(){ modCount++; intoldCapacity=elementData.length; if(elementCount是否为空
publicsynchronizedbooleanisEmpty(){ returnelementCount==0; }设置索引上的元素
publicsynchronizedvoidsetElementAt(Eobj,intindex){ if(index>=elementCount){ thrownewArrayIndexOutOfBoundsException(index+">="+ elementCount); } elementData[index]=obj; }添加元素
publicsynchronizedvoidaddElement(Eobj){ modCount++; ensureCapacityHelper(elementCount+1); elementData[elementCount++]=obj; }扩容
插入元素
publicsynchronizedvoidinsertElementAt(Eobj,intindex){ modCount++; if(index>elementCount){ thrownewArrayIndexOutOfBoundsException(index +">"+elementCount); } ensureCapacityHelper(elementCount+1); System.arraycopy(elementData,index,elementData,index+1,elementCount-index); elementData[index]=obj; elementCount++; }
- 扩容
- 数组拷贝向索引后移动
- 删除为向前移动
删除元素
publicsynchronizedbooleanremoveElement(Objectobj){ modCount++; inti=indexOf(obj); if(i>=0){ removeElementAt(i); returntrue; } returnfalse; }只能删除第一个
-我是签名----------------------------
这里只是一个签名详解
以上所述是小编给大家介绍的Java中的Vector,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!