본문 바로가기

gyub's 공부일기/그저 내 공부

배열 vs 리스트

1. 배열

- 크기를 바꿀 수 없는 정적 자료형

- 데이터에 접근하기 위한 인덱스가 존재하여 검색 속도가 빠르다.

- 하지만, 데이터의 위치가 인덱스와 맵핑되어 고정되기 때문에 데이터가 삭제되는 경우

- 배열의 빈 부분의 메모리가 낭비된다.

- 그렇기에 배열의 해당 인덱스에 데이터가 존재하는지 파악하는 로직이 추가적으로 필요하다.

- 검색에는 효율적이지만, 추가 및 삭제에 대해서는 비효율적이다.

 

2. 리스트

 

1) ArrayList

- 내부적으로 데이터를 배열에서 관리하며 추가, 삭제 시 임시 배열을 생성하여 데이터를 복사한다.

- 대량의 자료를 추가, 삭제할 시 메모리 소모가 크고, 시간이 오래 걸려 성능저하가 발생

- (삭제 시 제거되는 인덱스를 기준으로 뒤에 있는 객체가 한칸씩 이동한다.)

- 초기 사이즈가 10으로 고정되어 있기 때문에 사이즈를 초과할 시 사이즈가 늘어나는 배열을 생성하여 데이터를 옮겨야하기에 복잡한 연산과 메모리가 필요하다는 단점이 있다.

- 하지만 데이터마다 인덱스르 가지고 있기 때문에 검색에 효율적이다.

 

2) LinkedList

- 데이터를 노드에 저장하고 노드 간 양방향 연결을 통해 데이터를 추가, 삭제하는 구조

- (삭제 시 제거되는 인덱스의 앞 뒤 링크만 변경된다.)

- 따라서 추가, 삭제가 빠른 장점이 있지만, 검색 시 노드를 처음부터 순회해야 하기 때문에 비교적 느리다는 단점이 있다.

- 초기 사이즈를 미리 생성할 수 없다

 

반응형

'gyub's 공부일기 > 그저 내 공부' 카테고리의 다른 글

[Android] 프로세스  (0) 2022.03.20
[OS] 메모리 페이징  (0) 2022.03.19
Synchronized  (0) 2021.04.08
Serialization  (0) 2021.04.08
SOLID 원칙  (0) 2021.04.08