ArrayList, Vector, LinkedList는 모두 자바에서 제공하는 컬렉션 프레임워크의 일부인 동적 리스트 구현입니다. 각 컬렉션은 고유한 특징과 장단점이 있습니다.
ArrayList:
- ArrayList는 동적 배열을 구현합니다. 즉, 요소를 추가하거나 제거함에 따라 크기가 동적으로 변화합니다.
- ArrayList는 고정 크기 배열을 사용하여 요소를 저장합니다. 요소를 추가하거나 제거할 때 필요한 경우 새로운 배열로 복사하는 "복사-기존-수정" 전략을 사용합니다.
- ArrayList는 임의 접근(random access)을 지원합니다. 즉, 인덱스를 사용하여 특정 요소에 빠르게 접근할 수 있습니다. O(1)의 시간 복잡도를 가집니다.
- ArrayList는 요소를 삽입하거나 제거하는 작업이 비용이 많이 들 수 있습니다. 특히 배열의 용량이 가득 찬 경우 새로운 배열로 복사하는 과정이 필요합니다.
- ArrayList는 요소를 검색하는 작업이 효율적입니다. 인덱스를 사용하여 직접 접근할 수 있으므로 O(1)의 시간 복잡도를 가집니다.
- ArrayList는 요소를 정렬된 순서로 유지하지 않습니다. 요소를 추가하거나 제거함에 따라 인덱스가 변경될 수 있습니다.
Vector:
- Vector는 ArrayList와 유사하지만, 멀티 스레드 환경에서 안전하도록 동기화(synchronized)된 컬렉션입니다. 즉, 여러 스레드가 동시에 Vector를 수정하더라도 데이터 일관성이 보장됩니다.
- Vector는 동적 배열을 사용하여 요소를 저장합니다. 요소를 추가하거나 제거할 때 항상 새로운 배열로 복사하는 "복사-기존-수정" 전략을 사용합니다.
- Vector는 임의 접근(random access)을 지원합니다. 인덱스를 사용하여 특정 요소에 빠르게 접근할 수 있습니다. O(1)의 시간 복잡도를 가집니다.
- Vector는 요소를 삽입하거나 제거하는 작업이 비용이 많이 들 수 있습니다. 항상 새로운 배열로 복사하는 과정이 필요합니다.
- Vector는 요소를 검색하는 작업이 효율적입니다. 인덱스를 사용하여 직접 접근할 수 있으므로 O(1)의 시간 복잡도를 가집니다.
- Vector는 요소를 정렬된 순서로 유지하지 않습니다. 요소를 추가하거나 제거함에 따라 인덱스가 변경될 수 있습니다.
LinkedList:
- LinkedList는 연결 리스트(linked list)를 구현합니다. 즉, 요소를 노드(node)로 연결하여 관리합니다.
- LinkedList는 동적 크기 조정이 가능합니다. 요소를 추가하거나 제거함에 따라 노드 연결을 변경합니다.
- LinkedList는 임의 접근(random access)을 지원하지 않습니다. 특정 요소에 접근하려면 노드를 따라 순회해야 하므로 O(n)의 시간 복잡도를 가집니다.
- LinkedList는 요소를 삽입하거나 제거하는 작업이 효율적입니다. 노드 연결만 변경하면 되므로 O(1)의 시간 복잡도를 가집니다.
- LinkedList는 요소를 검색하는 작업이 비용이 많이 들 수 있습니다. 노드를 따라 순회해야 하므로 O(n)의 시간 복잡도를 가집니다.
- LinkedList는 요소를 정렬된 순서로 유지하지 않습니다. 요소를 추가하거나 제거함에 따라 노드 연결이 변경될 수 있습니다.
주제 | ArrayList | LinkedList | Vector |
---|---|---|---|
동기화 | 없음 | 없음 | 있음 |
임의 접근 | 허용 | 허용 안 함 | 허용 |
메모리 위치 | 연속 | 연속 아님 | 연속 |
null 값 | 지원 | 지원 | 지원 |
데이터 구조 | 동적 배열 | 양방향 연결 리스트 | 동적 배열 |
중복 허용 | 예 | 예 | 예 |
삽입 및 삭제 | 느림 | 빠름 | 느림 |
위 표는 ArrayList, LinkedList, Vector의 차이점을 요약한 것입니다. 각 컬렉션은 고유한 특징과 장단점이 있습니다.
요약하면, ArrayList와 Vector는 동적 배열을 구현하며 임의 접근을 지원하지만 삽입 및 제거 작업에 비용이 많이 들 수 있습니다. 반면, LinkedList는 연결 리스트를 구현하며 임의 접근을 지원하지 않지만 삽입 및 제거 작업이 효율적입니다. 각 컬렉션은 특정 사용 사례와 요구 사항에 따라 적합합니다.
'프로그래밍 언어 > 자바' 카테고리의 다른 글
자바의 자원 관리 방법 비교: try-with-resources와 try-finally (0) | 2024.06.06 |
---|---|
일급 컬렉션 (0) | 2024.04.04 |