Study/Algorithm

Algorithm Study 자료구조- ' List '

Dodal 2021. 5. 2. 18:50

앞서 공부한 배열은 다수의 데이터를 그룹핑해서 효율적으로 데이터를 관리한다.

배열의 가장 큰 특징은 인덱스가 있다는 것이다.

만약 인덱스를 알고 있다면 인덱스를 이용해서 데이터들을 가져올 수 있다.

인덱스를 이용한 데이터의 조회는 매우 빠르게 처리 된다.

하지만 인덱스를 이용해서 데이터를 가져오려면 데이터에 대한 인덱스의 값이 고정되어야 한다.

자연스럽게 어떤 엘리먼트가 삭제되면 삭제된 상태를 빈 공간으로 남겨둬야 한다.

이건 메모리의 낭비를 부른다. 또한 배열에 데이터가 있는지 없는지 체크하는 로직이 필요하다.

 

리스트는 배열이 가지고 있는 인덱스라는 장점을 버리고 대신 빈틈없는 데이터의 적재라는 장점을 취한 데이터 구조라고 할 수 있다.

 

리스트에서는 인덱스가 중요하지 않다. 핵심은 엘리먼트들 간의 순서이다.

그래서 리스트를 다른 말로는 시퀀스라고도 부른다.

시퀀스는 순서라는 의미이다. 즉 순서가 있는 데이터의 모임이 리스트이다.

 

리스트의 기능(List Operation)

-처음, 끝, 중간엘리먼트추가/삭제하는 기능

- 리스트에 데이터가 있는지를 체크하는 기능

- 리스트의 모든 데이터에 접근할 수 있는 기능

위와 같은 기능을 가지고 있고 순서가 있으면서 중복이 허용된다면 그러한 데이터 스트럭쳐를 리스트라고 한다.

 

자바 스크립트의 경우 배열에 리스트 기능이 내장되어 있다.

 

numbers = [10, 20, 30, 40, 50]
// 인덱스 3의 값을 제거
numbers.splice(3, 1); // splice(배열변경을 시작할 인덱스, 삭제할 갯수)
for(i = 0, i < numbers.length; i++) {
	console.log(numbers[i]);
}

// 실행결과
10
20
30
50

 

 

JAVA언어의 경우는 개발자가 배열과 리스트 중에 자신의 상황에 맞는 선택을 분명하게 
선택할 수 있도록 이것들을 별도의 기능으로 지원하고 있다.
인덱스를 이용해서 데이터를 가져오는 것이 빈번하다면 ArrayList가 훨씬 빠르지만

데이터의 추가와 삭제가 이뤄질 때 인덱스를 옮기고 매꿔야되서 처리가 느리다.


데이터의 추가/삭제가 빈번하다면 LinkedList가 훨씬 효과적이다.

다만 인덱스를 통해서 접근을 하지 않고 순차적으로 돌면서 해당값에 접근하기 때문에 조회는 느리다.

 

반응형