List와 Array 타입 모두 표면적으로는 비슷한 기능을 제공하지만 내부적으로 메모리에 접근하는 방식의 차이로 인해 사용 용도가 다르다.
결론적으로 Array 타입은 메모리에 연속적으로 저장되며 정적인 데이터 처리 어울리고, List 타입은 메모리에 비연속적으로 저장되며 동적인 데이터 처리에 어울린다.
배열
- 고정된 길이: 배열은 초기 선언 시 길이가 고정되며 이후에는 크기를 변경할 수 없다.
- 런타임 수정의 어려움: 실행 중에 크기를 변경하거나 요소를 삽입/삭제하는 것이 어렵기 때문에 정해진 데이터를 다룰 때 적합하다.
- 연속적인 메모리 저장: 메모리에 연속적으로 저장되므로 탐색 속도가 빠르다.
- 정적인 데이터에 적합: 삽입/삭제가 거의 없는 정적인 데이터 처리에 어울린다.
시간 복잡도
연산 | 시간 복잡도 | 설명 |
접근 (Access) | O(1) | 인덱스를 통해 즉시 접근 가능 |
검색 (Search) | O(n) | 원하는 값을 찾기 위해 전체 요소를 탐색해야 함 |
삽입/삭제 | ||
-- 시작/중간 위치 | O(1) | 요소들을 이동해야 하므로 시간이 많이 소요 |
-- 끝에 추가 | 불가능 | 크기가 고정되어 있어 추가할 수 없음 |
리스트
- 가변적인 길이: 리스트는 요소의 추가 및 삭제가 자유로우며 길이가 동적으로 변한다.
- 런타임 중 유동성: 실행 중에 데이터의 변경이 빈번한 경우에 적합하다.
- 비연속적인 메모리 저장: 메모리에 비연속적으로 저장되므로 탐색 속도가 배열보다 느리다.
- 동적인 데이터에 적합: 삽입/삭제가 자주 발생하는 동적인 데이터 처리에 어울린다.
시간 복잡도
ArrayList
연산 | 시간 복잡도 | 설명 |
접근 (Access) | O(1) | 인덱스를 통해 즉시 접근 가능 |
검색 (Search) | O(n) | 원하는 값을 찾기 위해 전체 요소를 탐색해야 함 |
삽입/삭제 | ||
-- 끝에 추가/삭제 | O(1) | 평균적으로 O(1), 배열 크기 증가 시 O(n) 시간 소요 |
-- 시작/중간 위치 | O(n) | 요소들을 이동해야 하므로 시간이 많이 소요 |
LinkedList
연산 | 시간 복잡도 | 설명 |
접근 (Access) | O(n) | 앞에서부터 순차적으로 접근해야 함 |
검색 (Search) | O(n) | 원하는 값을 찾기 위해 전체 노드를 탐색해야 함 |
삽입/삭제 | ||
-- 특정 위치에서 | O(1) | 노드의 참조를 알고 있는 경우, 삽입/삭제가 빠르게 수행 |
'Dev > Java' 카테고리의 다른 글
『Java』 자바에서 Charset 클래스와 UTF-8의 관계는 무엇인가? (0) | 2024.12.10 |
---|---|
『Java』 Priority Queue (0) | 2024.12.02 |
『Java』 Map, Stack, Queue, Deque (0) | 2024.11.28 |
『Java』 Java 8, Stream 기본 (1) | 2024.11.24 |
『Java』 내부 클래스, 정적 중첩 클래스, 지역 클래스, 익명 클래스 (0) | 2024.11.24 |