ArrayList 소스 학습(2)
두 개의 빈 그룹 상수 속성
Array List 원본 학습(1)에서 Array List의 구조 방법을 상세하게 설명했지만 두 개의 정적 공수조 상량 속성
EMPTY_ELEMENTDATA
과 DEFAULTCAPACITY_EMPTY_ELEMENTDATA
에 대해 설명하지 않았다. 사실 이 두 속성은 주로 Array List 대상을 호출할 때 현재 대상을 만들 때 어떤 구조 방법을 호출했는지 확인하기 위해서이다.elementData
이 DEFAULTCAPACITY_EMPTY_ELEMENTDATA
이면 매개 변수가 없는 구조 방법을 사용했기 때문에 초기 용량은 DEFAULT_CAPACITY
elementData
이 EMPTY_ELEMENTDATA
이라면 파라미터가 있는 구조방법을 호출한 것이고 초기 용량은 구조방법의 파라미터에 의해 요소 추가
public boolean add(E e) {
ensureCapacityInternal(size + 1);
elementData[size++] = e;
return true;
}
대상을 만든 후에 우리는 메모리에 데이터를 저장할 수 있다는 것을 의미한다. 용기에 데이터를 추가하려면 먼저 순서표에 충분한 공간이 있는지 확인해야 한다.
ensureCapacityInternal
방법은 순서표의 용량을 측정하는 것이다. 이때의 매개 변수는 size+1
이고 순서표 대상의 요소 개수는 size
이다. 만약에 순서표에 요소를 성공적으로 추가하려면elementData
의 용량을 size+1
보다 적게 확보해야 하며, 이는 순차표의 elementData
의 최소 용량입니다.private void ensureCapacityInternal(int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
ensureExplicitCapacity(minCapacity);
}
먼저
elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
을 판단하면 ArrayList
대상을 만들 때 무참구조 방법을 사용하고 이때의 순서표에 데이터가 없기 때문에 DEFAULT_CAPACITY
과 파라미터의 최소 용량 minCapacity
에서 최대치를 얻어 명확한 최소 용량을 확정한다.private void ensureExplicitCapacity(int minCapacity) {
modCount++;
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
ensureExplicitCapacity
은 순서표의 최소 용량을 명확히 하고 modCount
은 순서표 구조가 바뀐 횟수를 나타낸다. 순서표의 최소 용량인 minCapacity
이 elementData
의 길이보다 크면 순서표를 확장한다.private void grow(int minCapacity) {
// elementData
int oldCapacity = elementData.length;
// 1.5
int newCapacity = oldCapacity + (oldCapacity >> 1);
// ,
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
// , hugeCapacity
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// elementData newCapacity , elementData
elementData = Arrays.copyOf(elementData, newCapacity);
}
hugeCapacity
방법은 int
유형의 길이를 초과하지 않도록 확장하기 위한 것입니다. private static int hugeCapacity(int minCapacity) {
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
return (minCapacity > MAX_ARRAY_SIZE) ?
Integer.MAX_VALUE :
MAX_ARRAY_SIZE;
}
minCapacity < 0
은 확장된 용량이 int
유형의 최대치를 초과했음을 의미하며, 이때 메모리가 넘치는 오류가 발생했습니다.최소 용량이 순차표 최대 용량보다 크면 Integer.MAX_VALUE
을 새 용량으로 하고 그렇지 않으면 MAX_ARRAY_SIZE
을 새 용량으로 한다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.