详解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,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!