개인 개발 TIL

(2022-11-21) 배열과 리스트

redknife 2022. 11. 21. 20:27

알고리즘 문제를 풀다가 배열과 리스트에 대해 헷갈려서 아직 개념을 확실히 알지 못한다고 판단되어 다시 공부할겸 적게 되었다.

배열(Array)

- 데이터가 많아지고 그룹 관리의 필요에 따라 배열을 사용한다.

- 고정된 크기를 갖는 같은 자료형의 원소들이 연속적인(논리적 저장 순서와 물리적 저장 순서가 일치) 형태로 구성된 자료구조

- 인덱스에 따라 값을 유지하므로 원소가 삭제되어도 빈자리가 남게되어 메모리가 낭비된다.

- 처음 크기를 10으로 지정한다면 5개의 데이터만 저장하더라도 실제 배열의 크기는 10이다.

- 인덱스(index) : 각 원소의 번호로 0번부터 시작하며, 해당 원소에 접근한다.

- 데이터 갯수가 확실하게 정해져 있고, 접근이 빈번한 경우 배열이 효율적이다.

- c-ache hit 가능성이 커져 성능에 큰 도움이 된다.

- ca-che hit : CPU가 참조하고자 하는 메모리가 캐시에 존재하고 있는 경우

- 고정이고 연속적인 만큼 인덱스로 random access가 가능하다.

- 접근, 수정 O(1)으로 빠르게 조회가 가능하다.

- 하지만 삽입과 삭제의 경우 연속적인 형태 유지를 위해 shift 연산을 해야하므로 O(n)이 된다.

리스트(List)

- 배열의 문제점을 해결하기 위한 자료구조

- 빈틈없는 데이터의 적재라는 장점을 가진다.

- 원소를 삭제했을 때 삭제된 데이터 뒤 원소로 빈틈없이 연속적으로 위치시킨다.

- 리스트의 핵심은 원소들 간의 순서로 순서가 있는 데이터의 모임이 리스트이며 리스트를 다른 이름으로 시퀀스(sequence)라고도 부른다.

- 배열에서 인덱스는 유일무이한 식별자이지만 리스트에서는 몇 번째 데이터인지 정도의 의미를 가진다.

- 빈 엘리먼트는 허용하지 않는다.

- 순차성을 보장하지 못하기 때문에 spacial locality 보장이 되지 않아 cash hit가 어렵다.

- spacial locality : 프로그램 실행 시 접근하는 메모리 영역은 이미 접근이 이루어진 영역의 근처일 확률이 높다는 프로그램 성격 표현

  저장 방식 크기 할당 속도
Array(배열) 정해진 공간이 있고,
그 모든 곳의
식별자(인덱스)가 존재
ex) str[i]
객체생성시 크기 할당 필수
ex) char[] c = new char[3]
삽입/삭제: 느림
데이터조회: 빠름
List(리스트) 식별자(인덱스)가 없음,
앞의 요소가 삭제되면
새로 추가되는 요소가
그 공간에 저장될 수 있음
크기 할당 필요X
(자바에선
자동으로 1.5배씩 늘어남)
삽입/삭제: 빠름
데이터조회: 느림


배열의 크기는 length를 쓰고

리스트의 크기는 size를 써야함




출처 : https://suzyalrahala.tistory.com/24

          https://jy-tblog.tistory.com/38