배열
- 검색 연산은 빠르지만, 추가/삭제 연산이 느리다
- 추가/삭제 : 새로운 데이터가 입력되거나 중간에서 특정 항목이 삭제될 경우 메모리 상의 주소를 모두 바꿔야 한다.
- 배열의 검색 : O(1)
- 배열의 수정/삭제 : O(ͷ)

연결 리스트 Linked List
- 배열과 같이 연속된 데이터를 저장하는 자료구조로서 추가/삭제 연산은 빠르지만, 검색이 느리다.
- 아무 메모리에나 저장하고 기존 데이터에 부가 정보로 다음 데이터의 주소를 저장한다.
- 검색 : 5번째 데이터를 찾고 싶다면 처음 주소지에서 다음 데이터의 주소를 찾는데 연산이 4번
- 추가/삭제 : 기존 데이터 구조가 변하지 않고 데이터간의 주소 연결만 수정한다.
- 리스트의 검색 : O(ͷ)
- 리스트의 추가/삭제 : O(1)



| 기능 | Array | List | 
| 생성 | ex) String[] arr = new String[5]; | ex) List<String> list = new ArrayList<>(); | 
| 길이 확인 | arr.length | list.size() | 
| 값 추가 | ❌ (크기 고정) | list.add("A") | 
| 값 삽입 | ❌ | list.add(1, "A") | 
| 값 조회 | arr[i] | list.get(i) | 
| 값 수정 | arr[i] = "A" | list.set(i, "A") | 
| 값 삭제 | ❌ | list.remove(i) or list.remove("A") | 
| 포함 여부 확인 | Arrays.asList(arr).contains("A") | list.contains("A") | 
| 정렬 | Arrays.sort(arr) | Collections.sort(list) | 
| 복사 | Arrays.copyOf(arr, n) | new ArrayList<>(list) | 
| 문자열 출력 | Arrays.toString(arr) | list.toString() | 
| 비었는지 확인 | arr.length == 0 | list.isEmpty() | 
| 전체 삭제 | ❌ | list.clear() | 
| 인덱스 조회 | Arrays.asList(arr).indexOf("A") | list.indexOf("A") | 
| 마지막 인덱스 조회 | Arrays.asList(arr).lastIndexOf("A") | list.lastIndexOf("A") | 
| 배열 → 리스트 변환 | Arrays.asList(arr) | — | 
| 리스트 → 배열 변환 | — | list.toArray(new String[0]) | 

| ArrayList | Vector | LinkedList | |
| 내부 구조 | 동적 배열 (Dynamic Array) | 동적 배열 (Dynamic Array) | 이중 연결 리스트 (Doubly Linked List)  | 
| 동기화 | ❌ (비동기) | ✅ (자동 동기화) | ❌ (비동기) | 
| 성능 | 빠름 (단일 스레드 환경에 적합) | 느림 (동기화 오버헤드 존재) | 삽입/삭제는 빠름 탐색은 느림  | 
| 삽입/삭제 | 느림 (중간 삽입/삭제 시 이동 필요) | 느림 | 빠름 (노드 연결만 조작) | 
| 조회 성능 | 빠름 (인덱스 기반 접근) | 빠름 | 느림 (순차 접근 필요) | 
| 메모리 사용 | 상대적으로 적음 | 상대적으로 적음 | 상대적으로 많음 (노드 + 포인터)  | 
| 멀티스레드 환경  | 
직접 Collections.synchronizedList() 사용 | 자체적으로 동기화 | 직접 동기화 필요 | 
| 사용 시점 요약  | 
일반적인 리스트 사용 시 가장 많이 사용 | 멀티스레드 환경에서 안전하게 사용할 때 | 삽입/삭제가 빈번한 경우에 적합 | 
refer to
메가아이티아카데미 이광호쌤
반응형
    
    
    
  'IT > Algorithm | Coding Test' 카테고리의 다른 글
| [백준 1546] [Java] 평균구하기 (0) | 2025.01.15 | 
|---|---|
| [백준 11720] [Java] 숫자의 합 (0) | 2025.01.14 | 
| [백준 2164] [Java] 카드2 (0) | 2025.01.08 | 
| 스택 Stack, 큐 Queue, 덱 Deque (1) | 2025.01.05 | 
| Stream vs IntStream (0) | 2025.01.04 |