Array | |
---|---|
access | |
append | |
마지막 원소delete | |
insertion | |
deletion | |
search |
이중연결리스트
각 요소가 노드로 구현
메모리상에서는 비연속적 저장, 논리적 연속성을 가짐
Linked list | |
---|---|
access | |
search | |
insertion | |
deletion |
특징 | Array | ArrayList | LinkedList |
---|---|---|---|
구조 | 고정 크기의 배열 (크기 변경 불가) | 동적 크기의 배열 (자동으로 크기 조정) | 이중 연결 리스트 (노드 기반) |
메모리 저장 방식 | 연속된 메모리 공간에 저장 | 연속된 메모리 공간에 저장 | 비연속적인 메모리 공간에 노드로 저장 |
크기 | 선언 시 고정, 크기 변경 불가 | 자동으로 크기 조정 (내부적으로 배열 복사) | 동적 크기, 삽입/삭제 시 크기 조정 |
삽입/삭제 성능 | 중간 삽입/삭제 시 느림 (O(n) ) | 중간 삽입/삭제 시 느림 (O(n) ) | 중간 삽입/삭제가 빠름 (O(1) ) |
읽기 성능 | 인덱스를 통한 빠른 액세스 (O(1) ) | 인덱스를 통한 빠른 액세스 (O(1) ) | 노드를 따라가며 읽어야 해서 느림 (O(n) ) |
메모리 사용 | 요소만 저장 | 요소만 저장 | 각 노드에 추가로 이전/다음 노드 참조가 필요함 |
초기 크기 설정 | 필요 (크기 변경 불가) | 필요 없음 (자동 크기 증가) | 필요 없음 |
사용 사례 | 크기가 고정된 데이터, 빠른 접근이 필요한 경우 | 크기가 가변적이고, 읽기 성능이 중요한 경우 | 삽입/삭제가 빈번하게 발생하는 경우 |
멀티스레드 안전성 | 지원하지 않음 (수동으로 동기화 필요) | 지원하지 않음 (수동으로 동기화 필요) | 지원하지 않음 (수동으로 동기화 필요) |
초기 성능 | 빠름 (고정 크기로 메모리 할당) | 초기 메모리 할당 후 배열 복사 시 느려질 수 있음 | 초기 메모리 할당은 빠름, 이후 노드 삽입/삭제 가능 |