1. ArrayList
구성 방법
ArrayList
요소를 저장하는 데 가장 일반적으로 사용되는 Java 클래스입니다. 그렇다면 어떻게 ArrayList
작동하며 왜 모두가 좋아할까요?
의 구조는 ArrayList
간단하고 독창적입니다. 각 ArrayList
개체에는 두 개의 필드가 있습니다.
- 요소 배열
size
목록의 요소 수를 저장하는 변수
내부적으로 ArrayList
객체는 가장 일반적인 배열을 포함합니다! 하지만 그게 다가 아닙니다. 목록의 길이를 저장하는 크기 변수 도 있습니다 . 작동 방식은 다음과 같습니다.
처음에 목록 내부의 배열 길이는 10입니다. 그리고 size
변수는 0입니다.
목록에 요소를 추가하면 배열의 0번째 셀에 저장되고 size
1로 증가합니다.
요소를 하나 더 추가하면 첫 번째 셀에 저장되고 size
다시 1씩 증가하여 2가 됩니다.
배열에 더 이상 공간이 없을 때 다른 요소를 추가하면 메서드에서 다음이 발생합니다 add()
.
- 이전 어레이 길이의 1.5배인 새 어레이가 생성됩니다.
- 이전 배열의 모든 요소가 새 배열로 복사됩니다.
ArrayList
개체 에서 새 배열에 대한 참조가 이전 배열에 대한 참조를 대체합니다 .- 전달된 요소는 새 배열의 10번째 셀에 저장됩니다 .
- 크기 변수가 1씩 증가하여 이제 11이 됩니다 .
목록 중간에 요소를 추가(삽입)할 때도 비슷한 일이 발생합니다. 기존 요소는 오른쪽으로 1만큼 이동하고 전달된 요소는 배열의 새로 해제된 셀에 기록됩니다.
이제 목록과 관련된 가장 기본적인 시나리오를 살펴보겠습니다.
2. 요소 추가ArrayList
목록에 요소가 추가될 때 목록 내부에서 어떤 일이 발생하는지 살펴보겠습니다. ArrayList 객체가 생성된 직후 메모리에는 다음과 같은 것이 있습니다.
ArrayList
두 개의 필드(두 개의 변수), 즉 컨테이너( data
배열)와 저장된 요소의 수( )를 포함하는 객체가 있습니다 size
. 변수 는 data
10개의 요소를 저장할 수 있는 컨테이너(배열)에 대한 참조를 저장합니다.
배열에 숫자 5를 추가하기로 결정하면 다음 그림이 표시됩니다.
배열은 이제 요소 5를 저장하고 size == 1
.
누군가 지금 객체 size()
에 대한 메서드를 호출하면 ArrayList
반환 값은 목록에 저장된 요소의 수입니다. 1. 목록의 요소 수는 배열의 저장 용량과 동일하지 않습니다.
현재 스토리지 용량이나 어레이 자체는 개체 외부에서 액세스(볼 수)되지 않습니다 ArrayList
. 이것은 항상 의 내부 데이터입니다 ArrayList
.
10, 20, 30, 40, 50, 60, 70 등 7개의 숫자를 목록에 추가해 보겠습니다.
이제 메모리는 다음과 같이 표시됩니다.
지금 메서드 를 호출하면 size()
목록의 새 요소 수인 숫자 8이 반환됩니다. 이 값은 내부 배열의 크기와 관련이 없습니다.
이 그림에는 한 가지 지나친 단순화가 있습니다.
클래스 는 기본 유형 ArrayList
을 저장할 수 없으므로 . 컨테이너는 {5, 10, 20, 30, 40, 50, 60, 70} 값을 직접 저장하지 않고 개체에 대한 참조를 저장합니다. 컨테이너 저장소의 모든 빈 셀 .Integer
int
Integer
null
3. 목록 길이 늘리기
내부 배열에 빈 셀이 더 이상 없을 때 목록 내부에서 어떤 일이 발생하는지 살펴보겠습니다.
10개의 요소 목록이 있다고 가정합니다.
숫자 100 을 추가하기로 결정했습니다 . 이것은 add()
메서드에서 일어나는 일입니다.
1단계 - 새 어레이 생성:
2단계 — 기존 배열의 모든 요소를 새 배열로 복사합니다.
3단계 - 이전 배열을 교체합니다(객체의 내부 배열에 대한 참조 변경 ArrayList
).
4단계 — 우리가 열심히 노력하여 달성한 새 번호를 추가합니다.
GO TO FULL VERSION