언어 관련/C#
List<T>와 LinkedList<T> 의 차이점(ps. 트리 구조)
chinodaiski
2025. 1. 27. 20:56
List<T>와 LinkedList<T>의 주요 차이점
내부 구조 | 동적 배열 (연속된 메모리 할당) | 이중 연결 리스트 (노드 기반) |
메모리 사용 | 연속된 메모리 블록 사용 (낭비 적음) | 추가적인 포인터 메모리 필요 |
접근 속도 | O(1) (인덱스를 통한 빠른 접근) | O(n) (순차 검색 필요) |
삽입/삭제 속도 | O(n) (중간 삽입/삭제 시 이동 필요) | O(1) (노드 추가/삭제) |
인덱스 접근 | 가능 (배열처럼 [index]) | 불가능 (순차 탐색 필요) |
순차 접근 | 빠름 (연속된 메모리로 캐시 효율적) | 느림 (노드를 따라가야 함) |
적합한 상황 | 조회와 인덱스 기반 작업이 많은 경우 | 빈번한 삽입/삭제 작업이 많은 경우 |
이는 C#의 List<T>는 C++의 std::vector와, C#의 LinkedList<T>는 C++의 std::list와 유사한 구조와 동작 방식을 가지기 때문이다.
따라서 빈번한 삽입/삭제가 있을 경우엔 LinkedList<T>를, 검색을 많이 할 경우엔 List<T>를 사용하면 된다.
ps. 이진 트리 구조에 대하여
- C#에는 이진 트리가 존재하지 않는다. 하지만 관련 자료구조를 직접 만들어 사용하거나 비슷한 자료구조가 존재한다.
[ 트리형식으로 관리되는 자료구조 ]
- C#의 SortedDictionary<TKey, TValue>는 내부적으로 레드-블랙 트리(Red-Black Tree) 를 사용하여 키-값 쌍을 정렬된 상태로 유지한다.
- SortedSet<T>는 중복을 허용하지 않으며, 균형 이진 탐색 트리(Balanced Binary Search Tree) 기반으로 요소를 자동 정렬하고 관리한다.
레드-블랙 트리(RBT)와 균형 이진 탐색 트리(BBST)는 모두 트리의 균형을 유지하는 알고리즘(밸런싱)을 적용하여 삽입, 삭제, 검색 연산에서 균일한 성능을 보장한다.