JDK 소스 의 벡터
2840 단어 Vector소스 코드SuperHakce소스 코드 학습
먼저 Vector 의 몇 가지 인 자 를 살 펴 보 겠 습 니 다.
protected int elementCount;
protected int capacityIncrement; ,
벡터 의 구조 함수
public Vector(int initialCapacity, int capacityIncrement) {
super();
if (initialCapacity < 0)// 0,
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];//
this.capacityIncrement = capacityIncrement;
}
Vector 는 스 레 드 가 안전 하지만 스 레 드 안전 의 실현 은 대량의 버스 잠 금 synchronized 를 통 해 수식 되 지만 외곽 함수 가 모두 사용 되 어 실현 되 기 때문에 효율 이 낮 습 니 다.
public synchronized void copyInto(Object[] anArray)
public synchronized void trimToSize()
public synchronized void ensureCapacity(int minCapacity)
public synchronized void setSize(int newSize)
public synchronized int capacity()
public synchronized int size()
public synchronized boolean isEmpty()
public synchronized int indexOf(Object o, int index)
public synchronized int lastIndexOf(Object o)
public synchronized int lastIndexOf(Object o, int index)
public synchronized E elementAt(int index)
public synchronized E firstElement()
public synchronized E lastElement()
public synchronized void setElementAt(E obj, int index)
public synchronized void removeElementAt(int index)
public synchronized void addElement(E obj)
......
Vector 는 간단 합 니 다. 확장 작업 grow 는 synchronized 수식 을 사용 하지 않 았 지만 외곽 함수 들 은 synchronized 수식 을 사용 하기 때문에 스 레 드 가 안전 합 니 다.
private void grow(int minCapacity) {
int oldCapacity = elementData.length;
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);
}
벡터 요소 삭제 동작 removeElementAt
public synchronized void removeElementAt(int index) {
modCount++;
if (index >= elementCount) {
throw new ArrayIndexOutOfBoundsException(index + " >= " +
elementCount);
}
else if (index < 0) {
throw new ArrayIndexOutOfBoundsException(index);
}
int j = elementCount - index - 1;
if (j > 0) {
System.arraycopy(elementData, index + 1, elementData, index, j);
}
elementCount--;
elementData[elementCount] = null; /* to let gc do its work */ , , , , null,
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java에서 Vector와 ArrayList의 차이점 자세히 보기먼저 이 두 종류를 보면 모두 List 인터페이스를 실현하는데 List 인터페이스는 모두 세 가지 실현 클래스가 있는데 그것이 바로 Array List, Vector와 Linked List이다.List는 여러 요소를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.