Array & List
Array
고정된 크기를 갖는 같은 자료형의 원소들을 연속적인 공간에 저장하는 자료구조
stack 영역에 메모리를 할당받은 뒤에 데이터 추가 → 정적 메모리 할당
장점
index를 통해 랜덤 엑세스가 매우 빠르다 →
O(1)
다중차원 배열(배열 안에 배열)을 사용할 수 있다
spatial locality가 보장되어 cache hit rate이 높다
단점
삽입, 삭제 연산을 하면 원소를 shift 해주어야 한다 → 최악의 경우
O(N)
할당된 메모리보다 저장할 데이터가 많으면 resizing이 필요하다
배열을 사용하면 좋은 경우
순차적 데이터를 저장하는 경우
다차원 데이터를 다루는 경우
랜덤 엑세스가 잦고, 삽입이나 삭제 연산이 적은 경우
List
순서가 있는 데이터의 모임
언어별 List 지원
C : 배열만 지원할 뿐 List를 지원하지 않음 (라이브러리를 사용하거나 직접 구현해야함)
Javascript : 배열에 List 기능이 포함됨
Python : 기본적으로 List를 제공, 배열은 제공하지 않음 (C보다 메모리를 더 많이 필요로함)
Java : 배열과 List를 모두 지원 (두 가지가 완전히 분리됨), 크게 ArrayList, LinkedList 형태로 지원함
Java의 ArrayList
내부적으로 배열로 구현됨
장점 : 인덱스를 통해 랜덤 엑세스가 가능 →
O(1)
단점 : 삽입, 삭제 연산속도가 느림 →
O(N)
Java의 LinkedList
새로운 데이터 추가시 heap 영역에 런타임시 메모리를 할당 → 동적 메모리 할당
장점 : 삽입, 삭제 연산속도가 빠름 →
O(1)
단점 : 인덱스 개념이 없기 때문에 랜덤 엑세스 불가능 →
O(N)
장점
삽입, 삭제 연산속도가 빠르다 →
O(1)
새로운 데이터 추가시 동적으로 메모리를 할당하기 때문에 resizing할 필요 없음
단점
index 개념이 없어 랜덤 엑세스가 불가능하다. 처음부터 탐색해야하기 때문에 →
O(N)
spatial locality가 보장되지 않아 cache hit rate이 낮다
Last updated