java 中的vector_详解Java中的Vector
Vector實現了AbstractList抽象類和List接口,和ArrayList一樣是基于Array存儲的
Vector 是線程安全的,在大多數方法上存在synchronized關鍵字
//Vector存放的元素,初始化默認長度為10
protected Object[] elementData;
//元素個數
protected int elementCount;
//每次擴容大小,默認為0
protected int capacityIncrement;
//構造函數,無指定初始化大小和無擴容大小
public Vector() {
this(10);
}
//構造函數,指定初始化大小和無擴容大小
public Vector(int initialCapacity) {
this(initialCapacity, 0);
}
//構造函數,指定初始化大小和擴容大小
public Vector(int initialCapacity, int capacityIncrement) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
this.capacityIncrement = capacityIncrement;
}
//構造函數,Collection集合
public Vector(Collection extends E> c) {
elementData = c.toArray();
elementCount = elementData.length;
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, elementCount, Object[].class);
}
//確保擴容的最小容量
public synchronized void ensureCapacity(int minCapacity) {
if (minCapacity > 0) {
modCount++;
ensureCapacityHelper(minCapacity);
}
}
private void ensureCapacityHelper(int minCapacity) {
// overflow-conscious code
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
//擴容
private void grow(int minCapacity) {
int oldCapacity = elementData.length;
//當擴容大小為0的時候,擴容為原來的2倍
int newCapacity = 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);
}
private static int hugeCapacity(int minCapacity) {
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
return (minCapacity > MAX_ARRAY_SIZE) ?
Integer.MAX_VALUE :
MAX_ARRAY_SIZE;
}
ensureCapacity(int minCapacity)方法確保Vector的最小長度,當擴容2倍小于minCapacity時,擴容到minCapacity大小,minCapacity不能小于0
最大長度為2的31次方-1
設置大小
public synchronized void setSize(int newSize) {
modCount++;
if (newSize > elementCount) {
ensureCapacityHelper(newSize);
} else {
for (int i = newSize ; i < elementCount ; i++) {
elementData[i] = null;
}
}
elementCount = newSize;
}
超過大小的被設置為Null
public synchronized void copyInto(Object[] anArray) {
System.arraycopy(elementData, 0, anArray, 0, elementCount);
}
public synchronized void trimToSize() {
modCount++;
int oldCapacity = elementData.length;
if (elementCount < oldCapacity) {
elementData = Arrays.copyOf(elementData, elementCount);
}
}
public synchronized int indexOf(Object o, int index) {
if (o == null) {
for (int i = index ; i < elementCount ; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = index ; i < elementCount ; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
是否為空
public synchronized boolean isEmpty() {
return elementCount == 0;
}
設置索引上的元素
public synchronized void setElementAt(E obj, int index) {
if (index >= elementCount) {
throw new ArrayIndexOutOfBoundsException(index + " >= " +
elementCount);
}
elementData[index] = obj;
}
添加元素
public synchronized void addElement(E obj) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = obj;
}
擴容
插入元素
public synchronized void insertElementAt(E obj, int index) {
modCount++;
if (index > elementCount) {
throw new ArrayIndexOutOfBoundsException(index
+ " > " + elementCount);
}
ensureCapacityHelper(elementCount + 1);
System.arraycopy(elementData, index, elementData, index + 1, elementCount - index);
elementData[index] = obj;
elementCount++;
}
擴容
數組拷貝向索引后移動
刪除為向前移動
刪除元素
public synchronized boolean removeElement(Object obj) {
modCount++;
int i = indexOf(obj);
if (i >= 0) {
removeElementAt(i);
return true;
}
return false;
}
只能刪除第一個
-我是簽名----------------------------
這里只是一個簽名
詳解
以上所述是小編給大家介紹的Java中的Vector,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
總結
以上是生活随笔為你收集整理的java 中的vector_详解Java中的Vector的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java魂斗罗_java 魂斗罗
- 下一篇: linux 命令行 java_在Linu