포스트

C# 제네릭 컬렉션과 비제네릭 컬렉션 정리

제네릭 컬렉션

컬렉션 이름설명버전
List<T>요소를 순서대로 저장하는 동적 배열.NET 2.0
LinkedList<T>각 요소가 컬렉션 내의 다음 요소와 이전 요소를 가리키는 노드로 구성된 이중 연결 리스트.NET 2.0
Stack<T>LIFO (Last In First Out) 정책을 사용하는 컬렉션. 순서-역순서 보장.NET 2.0
Queue<T>FIFO (First In First Out) 정책을 사용하는 컬렉션. 순서 보장.NET 2.0
PriorityQueue<TElement, TPriority>우선순위 큐, 우선순위에 따라 순서를 보장하는 완전 이진 트리.NET 6.0
HashSet<T>해시 테이블 기반 집합, 고유한 요소만 저장하는 데 사용 (중복 키 허용하지 않음).NET 3.5
SortedSet<T>완전 이진 트리 기반 집합, 고유한 요소만 저장하는 데 사용 (중복 키 허용하지 않음).NET 4.0
Dictionary<TKey, TValue>해시 테이블 기반 키-값 쌍, 각 키는 고유.NET 2.0
SortedDictionary<TKey, TValue>완전 이진 트리 기반 키-값 쌍, 각 키는 고유.NET 2.0
SortedList<TKey, TValue>내부적으로 두 개의 배열(키 배열과 값 배열)을 사용하는 키-값 쌍,
삽입/삭제의 시간이 더 드는 대신 캐시 효율성이 더 좋음(SortedDictionary에 비해)
.NET 2.0
ConcurrentBag<T>스레드 안전한 동시성 컬렉션. 스택과 유사하게 동작하나, 순서 보장 없음.NET 4.0
ConcurrentDictionary<TKey, TValue>스레드 안전한 해시 테이블 기반 키-값 쌍.NET 4.0
ConcurrentQueue<T>스레드 안전한 FIFO 정책을 사용하는 동시성 큐, 순서 보장.NET 4.0
ConcurrentStack<T>스레드 안전한 LIFO 정책을 사용하는 동시성 스택, 순서-역순서 보장.NET 4.0
BlockingCollection<T>스레드 안전하며, 생산자-소비자 패턴 지원 컬렉션.NET 4.0
ObservableCollection<T>데이터 바인딩 시 변경 사항을 알릴 수 있는 이벤트 발생 컬렉션.NET 3.0

비제네릭 컬렉션

비제네릭 컬렉션은 object 타입을 사용하는 컬렉션으로 박싱/언박싱이 빈번하게 일어나는 컬렉션입니다.

다만, object 타입과 박싱/언박싱에 대한 이해도를 가지고, 다양한 타입을 하나의 컬렉션에 저장하기 위한 용도로 쓰일 수도 있으니 제네릭과 중복되는 형태의 컬렉션을 포함하여 정리하겠습니다.

컬렉션 이름설명
ArrayList요소를 순서대로 저장하는 동적 배열. 인덱스를 통해 접근 가능
StackLIFO (Last In First Out) 정책을 사용하는 컬렉션. 순서-역순서 보장
QueueFIFO (First In First Out) 정책을 사용하는 컬렉션. 순서 보장
Hashtable키-값 쌍을 저장하는 해시 테이블 기반 컬렉션. 각 키는 고유
SortedList키에 따라 자동으로 정렬되는 키-값 쌍의 컬렉션. 각 키는 고유
BitArray비트(0 또는 1)의 배열로, 각 비트를 개별적으로 조작할 수 있음
ListDictionary연결 리스트 기반의 작은 규모의 딕셔너리. 대규모 데이터에는 비효율적.
HybridDictionary작은 컬렉션에는 ListDictionary, 컬렉션이 커지면 Hashtable로 전환하는 컬렉션
StringCollection문자열만을 저장하는 간단한 리스트. 문자열 작업에 최적화됨

참고

리스트

스택(stack)

큐(queue)

우선순위 큐(Priority Queue)와 힙(Heap)

트리, 이진 탐색 트리 (Binary Search Tree)

해시 테이블(Hash Table)과 개방 주소법(Open Addressing), 체이닝(Chaining)

이 기사는 저작권자의 CC BY-NC-ND 4.0 라이센스를 따릅니다.