배열

동일한 타입의 데이터를 메모리에 연속적으로 저장하는 가장 기본적인 자료구조입니다.

구조

index:  0    1    2    3    4
     [10] [20] [30] [40] [50]
      ↑ 시작 주소 기준으로 연속된 메모리 공간

핵심 연산

int[] arr = new int[5];      // 선언 - 크기 고정
arr[0] = 10;                 // 접근/수정 - O(1)

// 탐색 - O(n)
for (int i = 0; i < arr.length; i++) {
    if (arr[i] == target) return i;
}

// 삽입 (중간) - O(n), 뒤 요소를 모두 밀어야 함
// [10, 20, 40, 50] → 30 삽입 → [10, 20, 30, 40, 50]

시간복잡도

연산복잡도이유
접근O(1)인덱스로 주소 직접 계산
탐색O(n)순차 탐색
삽입/삭제 (끝)O(1)이동 불필요
삽입/삭제 (중간)O(n)요소 이동 필요

Java에서의 배열

// 정적 배열 - 크기 고정
int[] arr = new int[5];
int[] arr2 = {1, 2, 3, 4, 5};

// 동적 배열 - 크기 자동 확장 (내부적으로 배열 사용)
ArrayList<Integer> list = new ArrayList<>();
list.add(1);   // O(1) 평균, 확장 시 O(n)
list.get(0);   // O(1)
list.remove(0); // O(n)

ArrayList는 공간이 부족하면 내부 배열을 1.5배 크기로 복사해 확장합니다.

배열 vs ArrayList

항목배열ArrayList
크기고정동적 확장
타입primitive 가능객체만 가능
성능빠름약간의 오버헤드

CSLOG에서 보기