컬렉션 클래스를 신중하게 선택해야 합니다. 잘못된 형식을 사용하면 컬렉션 사용을 제한할 수 있습니다.
중요합니다
System.Collections 네임스페이스의 유형을 사용하지 마십시오. 컬렉션의 제네릭 및 동시 버전은 더 큰 형식 안전성 및 기타 개선 사항 때문에 권장됩니다.
다음 질문을 살펴보세요.
값이 검색된 후 요소가 일반적으로 삭제되는 순차 목록이 필요한가요?
그렇다면 선입선출(FIFO) 동작이 필요한 경우 Queue 클래스 또는 Queue<T> 제네릭 클래스를 고려하세요. 마지막으로 들어온 것이 먼저 나가는(LIFO, Last-in, First-out) 동작이 필요한 경우, Stack 클래스 또는 Stack<T> 제네릭 클래스를 사용하는 것이 좋습니다. 여러 스레드에서 안전하게 액세스하려면 동시 실행 가능한 버전 ConcurrentQueue<T> 및 ConcurrentStack<T>을 사용하십시오. 불변성을 위해 불변 버전인 ImmutableQueue<T> 및 ImmutableStack<T>를 고려하세요.
그렇지 않은 경우 다른 컬렉션을 사용하는 것이 좋습니다.
FIFO, LIFO 또는 임의와 같은 특정 순서로 요소에 액세스해야 합니까?
Queue 클래스 및 Queue<T>ConcurrentQueue<T>ImmutableQueue<T> 제네릭 클래스는 모두 FIFO 액세스를 제공합니다. 자세한 내용은 Thread-Safe 컬렉션을 사용하는 경우를 참조하세요.
Stack 클래스 및 Stack<T>ConcurrentStack<T>ImmutableStack<T> 제네릭 클래스는 모두 LIFO 액세스를 제공합니다. 자세한 내용은 Thread-Safe 컬렉션을 사용하는 경우를 참조하세요.
제네릭 클래스를 LinkedList<T> 사용하면 머리에서 꼬리로 또는 꼬리에서 머리까지 순차적으로 액세스할 수 있습니다.
인덱스별로 각 요소에 액세스해야 합니까?
ArrayList 및 StringCollection 클래스와 List<T> 제네릭 클래스는 0부터 시작하는 인덱스를 기반으로 해당 요소에 대한 액세스를 제공합니다. 불변성을 위해 불변의 제네릭 버전 ImmutableArray<T> 및 ImmutableList<T>을 고려하세요.
Hashtable, SortedList, ListDictionary, 및 StringDictionary 클래스와 Dictionary<TKey,TValue> 및 SortedDictionary<TKey,TValue> 제네릭 클래스는 요소의 키로 해당 요소에 대한 액세스를 제공합니다. 또한 다음과 같은 몇 가지 해당 형식의 변경할 수 없는 버전이 ImmutableHashSet<T>ImmutableDictionary<TKey,TValue>ImmutableSortedSet<T>있습니다. ImmutableSortedDictionary<TKey,TValue>
NameObjectCollectionBase 및 NameValueCollection 클래스와 KeyedCollection<TKey,TItem> 및 SortedList<TKey,TValue> 제네릭 클래스는 0부터 시작하는 인덱스나 요소의 키를 사용하여 그 요소에 액세스할 수 있습니다.
각 요소에는 하나의 값, 하나의 키와 하나의 값의 조합 또는 하나의 키와 여러 값의 조합이 포함하나요?
하나의 값: IList 인터페이스 또는 IList<T> 제네릭 인터페이스를 기반으로 하는 컬렉션 중 하나를 사용하십시오. 변경할 수 없는 옵션의 경우 제네릭 인터페이스를 IImmutableList<T> 고려합니다.
하나의 키와 하나의 값: IDictionary 인터페이스 또는 IDictionary<TKey,TValue> 제네릭 인터페이스를 기반으로 하는 컬렉션 중 하나를 사용합니다. 변경할 수 없는 옵션의 경우 IImmutableSet<T> 또는 IImmutableDictionary<TKey,TValue> 제네릭 인터페이스를 고려합니다.
포함된 키가 있는 값 1개: 제네릭 클래스를 KeyedCollection<TKey,TItem> 사용합니다.
하나의 키 및 여러 값: 클래스를 NameValueCollection 사용합니다.
요소를 입력한 방법과 다르게 정렬해야 합니까?
클래스는 Hashtable 해당 해시 코드를 기준으로 해당 요소를 정렬합니다.
SortedList 클래스 및 SortedList<TKey,TValue>SortedDictionary<TKey,TValue> 제네릭 클래스는 해당 요소를 키별로 정렬합니다. 정렬 순서는 IComparer 클래스에 대한 SortedList 인터페이스의 구현 및 IComparer<T>와 SortedList<TKey,TValue> 제네릭 클래스에 대한 SortedDictionary<TKey,TValue> 제네릭 인터페이스의 구현을 기반으로 합니다. 두 제네릭 형식 중, SortedDictionary<TKey,TValue>은 SortedList<TKey,TValue>보다 성능이 더 좋고, SortedList<TKey,TValue>는 메모리를 덜 소비합니다.
ArrayList에서는 Sort 구현을 매개변수로 취하는 IComparer 메서드를 제공합니다. 제네릭 클래스인 List<T>에는 Sort 제네릭 인터페이스의 구현을 매개 변수로 받는 IComparer<T> 메서드가 있습니다.
빠른 검색 및 정보 검색이 필요한가요?
- ListDictionary 는 작은 컬렉션(항목 10개 이하)보다 Hashtable 빠릅니다. 제네릭 클래스 Dictionary<TKey,TValue>는 제네릭 클래스 SortedDictionary<TKey,TValue>보다 더 빠른 조회를 제공합니다. 다중 스레드 구현은 ConcurrentDictionary<TKey,TValue>. ConcurrentBag<T> 는 정렬되지 않은 데이터에 대해 빠른 다중 스레드 삽입을 제공합니다. 두 다중 스레드 형식에 대한 자세한 내용은 Thread-Safe 컬렉션을 사용하는 경우를 참조하세요.
문자열만 허용하는 컬렉션이 필요한가요?
StringCollection (IList을/를 기반으로 한) 및 StringDictionary (IDictionary을/를 기반으로 한)는 System.Collections.Specialized 네임스페이스에 있습니다.
또한, 제네릭 형식 인수에 대해 System.Collections.Generic 클래스를 지정함으로써 String 네임스페이스의 제네릭 컬렉션 클래스를 강력한 형식의 문자열 컬렉션으로 사용할 수 있습니다. 예를 들어 변수를 List<String> 또는 Dictionary<String,String> 형식으로 선언할 수 있습니다.
LINQ to Objects 및 PLINQ
ko-KR: LINQ to Objects를 사용하면, 개발자는 개체 형식이 IEnumerable 또는 IEnumerable<T>을 구현하는 한, LINQ 쿼리를 사용하여 메모리 내 개체에 액세스할 수 있습니다. LINQ 쿼리는 데이터에 액세스하기 위한 일반적인 패턴을 제공하고, 일반적으로 표준 foreach
루프보다 간결하고 읽기 가능하며, 필터링, 순서 지정 및 그룹화 기능을 제공합니다. 자세한 내용은 LINQ to Objects(C#) 및 LINQ to Objects(Visual Basic)를 참조하세요.
PLINQ는 다중 코어 컴퓨터를 보다 효율적으로 사용하여 많은 시나리오에서 더 빠른 쿼리 실행을 제공할 수 있는 LINQ to Objects의 병렬 구현을 제공합니다. 자세한 내용은 PLINQ(병렬 LINQ)를 참조하세요.
참고하십시오
.NET