LinkedList, ArrayList, 그리고 Vector은 모두 Java에서 제공하는 리스트(List) 인터페이스를 구현한 클래스들입니다. 각각의 특성과 차이점을 알아보겠습니다.
1. ArrayList:
-
특성:
- 동적 배열(dynamic array)로 구현된 리스트.
- 배열 기반으로 데이터를 저장하며, 인덱스를 사용하여 빠른 접근이 가능.
-
장점:
- 랜덤 접근(인덱스를 통한 접근)이 빠르다.
- 데이터의 추가와 삭제가 리스트의 끝에서 이루어질 때 빠르다.
-
단점:
- 중간에 요소를 추가하거나 삭제할 때는 다른 요소들을 밀거나 당기는 작업이 필요하므로 비효율적.
- 중간에 요소가 삭제될때 일부 Heap 메모리가 빈 상태가 되어, GC의 대상이 됨.
-
사용 사례:
- 랜덤 액세스가 자주 일어나는 경우.
- 데이터의 추가와 삭제가 주로 리스트 끝에서 이루어지는 경우.
2. LinkedList:
-
특성:
- 이중 연결 리스트(doubly linked list)로 구현된 리스트.
- 각 노드가 이전 노드와 다음 노드를 가리키며, 노드를 통한 순차 접근이 빠르다.
-
장점:
- 중간에 요소를 추가하거나 삭제할 때 효율적.
- 리스트의 양 끝에서 요소를 추가하거나 삭제할 때도 빠르다.
-
단점:
-
사용 사례:
- 데이터의 중간에 요소를 추가하거나 삭제해야 하는 경우.
- 순차적인 접근이 자주 필요한 경우.
3. Vector:
-
특성:
- 기존의 자바 컬렉션 프레임워크에서 제공되던 클래스.
ArrayList와 유사하지만, 동기화된 메서드로 구성되어 있어 스레드 안전(thread-safe).
-
장점:
-
단점:
- 스레드 동기화 비용으로 인해 성능이 떨어질 수 있음.
-
사용 사례:
- 멀티스레드 환경에서 스레드 안전성이 필요한 경우.
차이점 요약:
ArrayList: 랜덤 액세스가 빠르며, 요소 추가/삭제가 끝에서 이루어질 때 효율적.
LinkedList: 중간에 요소를 추가/삭제할 때 효율적이며, 순차 접근이 빠르다.
Vector: 스레드 안전하게 동작하지만, 성능 면에서는 ArrayList보다 떨어질 수 있다.