Kolekcje i struktury danychCollections and Data Structures

Podobne dane często można obsługiwać wydajniej, gdy są przechowywane i przetwarzane jako kolekcja.Similar data can often be handled more efficiently when stored and manipulated as a collection. Można użyć klasy System.Array lub klas w przestrzeniach nazw System.Collections, System.Collections.Generic, System.Collections.Concurrent, system. Collections. niezmienne, aby dodawać, usuwać i modyfikować pojedyncze elementy lub zakres elementów w kolekcji.You can use the System.Array class or the classes in the System.Collections, System.Collections.Generic, System.Collections.Concurrent, System.Collections.Immutable namespaces to add, remove, and modify either individual elements or a range of elements in a collection.

Istnieją dwa główne typy kolekcji: Kolekcje ogólne i kolekcje inne niż ogólne.There are two main types of collections; generic collections and non-generic collections. Kolekcje ogólne zostały dodane w .NET Framework 2,0 i zapewniają kolekcje, które są bezpieczne dla typów w czasie kompilacji.Generic collections were added in the .NET Framework 2.0 and provide collections that are type-safe at compile time. Z tego względu kolekcje ogólne zazwyczaj oferują lepszą wydajność.Because of this, generic collections typically offer better performance. Kolekcje ogólne akceptują parametr typu podczas jego konstruowania i nie wymagają rzutowania na i z typu Object podczas dodawania lub usuwania elementów z kolekcji.Generic collections accept a type parameter when they are constructed and do not require that you cast to and from the Object type when you add or remove items from the collection. Ponadto większość ogólnych kolekcji jest obsługiwana w aplikacjach ze sklepu Windows.In addition, most generic collections are supported in Windows Store apps. Kolekcje inne niż ogólne przechowują elementy jako Object, wymagają rzutowania i większość nie są obsługiwane w przypadku tworzenia aplikacji do sklepu Windows.Non-generic collections store items as Object, require casting, and most are not supported for Windows Store app development. Nieogólne kolekcje mogą jednak być widoczne w starszym kodzie.However, you may see non-generic collections in older code.

Począwszy od .NET Framework 4, kolekcje w przestrzeni nazw System.Collections.Concurrent zapewniają wydajne, bezpieczne dla wątków operacje umożliwiające dostęp do elementów kolekcji z wielu wątków.Starting with the .NET Framework 4, the collections in the System.Collections.Concurrent namespace provide efficient thread-safe operations for accessing collection items from multiple threads. Niezmienne klasy kolekcji w System. Collections. niezmienna przestrzeń nazw (pakiet NuGet) są z natury bezpieczne wątkowo, ponieważ operacje są wykonywane na kopii oryginalnej kolekcji, a oryginalna kolekcja nie może być modyfikowana.The immutable collection classes in the System.Collections.Immutable namespace (NuGet package) are inherently thread-safe because operations are performed on a copy of the original collection and the original collection cannot be modified.

Wspólne funkcje kolekcjiCommon collection features

Wszystkie kolekcje zapewniają metody dodawania, usuwania lub znajdowania elementów w kolekcji.All collections provide methods for adding, removing or finding items in the collection. Ponadto wszystkie kolekcje, które bezpośrednio lub pośrednio implementują interfejs ICollection lub interfejs ICollection<T>, udostępniają następujące funkcje:In addition, all collections that directly or indirectly implement the ICollection interface or the ICollection<T> interface share these features:

Ponadto wiele klas kolekcji zawiera następujące funkcje:In addition, many collection classes contain the following features:

  • Właściwości pojemności i liczbyCapacity and Count properties

    Pojemność kolekcji to liczba elementów, które może zawierać.The capacity of a collection is the number of elements it can contain. Liczba kolekcji to liczba elementów, które faktycznie zawiera.The count of a collection is the number of elements it actually contains. Niektóre kolekcje ukrywają pojemność lub liczbę lub oba te elementy.Some collections hide the capacity or the count or both.

    Większość kolekcji zostanie automatycznie rozszerzona o pojemności, gdy osiągnięto bieżącą pojemność.Most collections automatically expand in capacity when the current capacity is reached. Pamięć zostanie ponownie przyalokowana, a elementy są kopiowane ze starej kolekcji do nowej.The memory is reallocated, and the elements are copied from the old collection to the new one. Zmniejsza to kod wymagany do korzystania z kolekcji; Jednak może to mieć negatywny wpływ na wydajność kolekcji.This reduces the code required to use the collection; however, the performance of the collection might be negatively affected. Na przykład w przypadku List<T>, jeśli Count jest mniejsza niż Capacity, dodanie elementu jest operacją O (1).For example, for List<T>, If Count is less than Capacity, adding an item is an O(1) operation. Jeśli pojemność musi zostać zwiększona w celu uwzględnienia nowego elementu, dodanie elementu zostanie operacją O (n), gdzie n jest Count.If the capacity needs to be increased to accommodate the new element, adding an item becomes an O(n) operation, where n is Count. Najlepszym sposobem, aby uniknąć niskiej wydajności spowodowanej przez wiele ponownych alokacji, jest ustawienie początkowej pojemności do szacowanego rozmiaru kolekcji.The best way to avoid poor performance caused by multiple reallocations is to set the initial capacity to be the estimated size of the collection.

    BitArray jest szczególnym przypadkiem; jego pojemność jest taka sama jak jej długość, która jest taka sama jak liczba.A BitArray is a special case; its capacity is the same as its length, which is the same as its count.

  • Spójna Dolna granicaA consistent lower bound

    Dolna granica kolekcji jest indeksem jego pierwszego elementu.The lower bound of a collection is the index of its first element. Wszystkie indeksowane kolekcje w przestrzeniach nazw System.Collections mają dolną granicę równą zero, co oznacza, że są one indeksowane przez 0.All indexed collections in the System.Collections namespaces have a lower bound of zero, meaning they are 0-indexed. Domyślnie Array ma dolną granicę równą zero, ale podczas tworzenia wystąpienia klasy Array przy użyciu Array.CreateInstancemożna zdefiniować inną dolną granicę.Array has a lower bound of zero by default, but a different lower bound can be defined when creating an instance of the Array class using Array.CreateInstance.

  • Synchronizacja w celu uzyskania dostępu z wielu wątków (tylko klasySystem.Collections).Synchronization for access from multiple threads (System.Collections classes only).

    Typy kolekcji nieogólnej w przestrzeni nazw System.Collections zapewniają bezpieczeństwo wątku z synchronizacją; zwykle uwidaczniane przez SyncRoot i IsSynchronized członków.Non-generic collection types in the System.Collections namespace provide some thread safety with synchronization; typically exposed through the SyncRoot and IsSynchronized members. Kolekcje te nie są domyślnie bezpieczne dla wątków.These collections are not thread-safe by default. Jeśli jest wymagany skalowalny i wydajny dostęp wielowątkowy do kolekcji, użyj jednej z klas w przestrzeni nazw System.Collections.Concurrent lub Rozważ użycie niezmiennej kolekcji.If you require scalable and efficient multi-threaded access to a collection, use one of the classes in the System.Collections.Concurrent namespace or consider using an immutable collection. Aby uzyskać więcej informacji, zobacz kolekcje bezpieczne dla wątków.For more information, see Thread-Safe Collections.

Wybieranie kolekcjiChoosing a collection

Ogólnie rzecz biorąc, należy używać kolekcji ogólnych.In general, you should use generic collections. W poniższej tabeli opisano niektóre typowe scenariusze zbierania danych oraz klasy kolekcji, których można użyć w tych scenariuszach.The following table describes some common collection scenarios and the collection classes you can use for those scenarios. Jeśli dopiero zaczynasz kolekcje ogólne, ta tabela ułatwi wybór ogólnej kolekcji, która działa najlepiej dla danego zadania.If you are new to generic collections, this table will help you choose the generic collection that works the best for your task.

Chcę...I want to… Ogólne opcje kolekcjiGeneric collection options Opcje kolekcji inne niż ogólneNon-generic collection options Opcje kolekcji bezpieczne dla wątków lub niemodyfikowalneThread-safe or immutable collection options
Przechowywanie elementów jako par klucz/wartość na potrzeby szybkiego wyszukiwania według kluczaStore items as key/value pairs for quick look-up by key Dictionary<TKey,TValue> Hashtable

(Kolekcja par klucz/wartość, które są zorganizowane na podstawie kodu skrótu klucza).(A collection of key/value pairs that are organized based on the hash code of the key.)
ConcurrentDictionary<TKey,TValue>

ReadOnlyDictionary<TKey,TValue>

ImmutableDictionary<TKey,TValue>
Dostęp do elementów według indeksuAccess items by index List<T> Array

ArrayList
ImmutableList<T>

ImmutableArray
Korzystanie z elementów First-In-First-Out (FIFO)Use items first-in-first-out (FIFO) Queue<T> Queue ConcurrentQueue<T>

ImmutableQueue<T>
Korzystanie z danych — Data ostatniej realizacji (LIFO)Use data Last-In-First-Out (LIFO) Stack<T> Stack ConcurrentStack<T>

ImmutableStack<T>
Uzyskuj dostęp do elementów sekwencyjnieAccess items sequentially LinkedList<T> Brak zaleceńNo recommendation Brak zaleceńNo recommendation
Otrzymuj powiadomienia, gdy elementy są usuwane lub dodawane do kolekcji.Receive notifications when items are removed or added to the collection. (implementuje INotifyPropertyChanged i INotifyCollectionChanged)(implements INotifyPropertyChanged and INotifyCollectionChanged) ObservableCollection<T> Brak zaleceńNo recommendation Brak zaleceńNo recommendation
Posortowana kolekcjaA sorted collection SortedList<TKey,TValue> SortedList ImmutableSortedDictionary<TKey,TValue>

ImmutableSortedSet<T>
Zestaw funkcji matematycznychA set for mathematical functions HashSet<T>

SortedSet<T>
Brak zaleceńNo recommendation ImmutableHashSet<T>

ImmutableSortedSet<T>

TytułTitle OpisDescription
Wybieranie klasy kolekcjiSelecting a Collection Class Opisuje różne kolekcje i pomaga wybrać jedną z nich dla danego scenariusza.Describes the different collections and helps you select one for your scenario.
Często używane typy kolekcjiCommonly Used Collection Types Opisuje powszechnie używane typy ogólnej i nieogólnej kolekcji, takie jak System.Array, System.Collections.Generic.List<T>i System.Collections.Generic.Dictionary<TKey,TValue>.Describes commonly used generic and nongeneric collection types such as System.Array, System.Collections.Generic.List<T>, and System.Collections.Generic.Dictionary<TKey,TValue>.
Kiedy należy używać kolekcji ogólnychWhen to Use Generic Collections Omawia użycie rodzajowych typów kolekcji.Discusses the use of generic collection types.
Porównywanie i sortowanie w ramach kolekcjiComparisons and Sorts Within Collections Omawia użycie porównania równości i sortowania w kolekcjach.Discusses the use of equality comparisons and sorting comparisons in collections.
Sortowane typy kolekcjiSorted Collection Types Opisuje informacje o wydajności i cechach posortowanych kolekcjiDescribes sorted collections performance and characteristics
Typy kolekcji: słownikowy i tabela skrótówHashtable and Dictionary Collection Types Opisuje funkcje rodzajowych i nieogólnych typów słowników opartych na skrótach.Describes the features of generic and non-generic hash-based dictionary types.
Kolekcje bezpieczne wątkowoThread-Safe Collections Opisuje typy kolekcji, takie jak System.Collections.Concurrent.BlockingCollection<T> i System.Collections.Concurrent.ConcurrentBag<T>, które obsługują bezpieczny i wydajny dostęp współbieżny z wielu wątków.Describes collection types such as System.Collections.Concurrent.BlockingCollection<T> and System.Collections.Concurrent.ConcurrentBag<T> that support safe and efficient concurrent access from multiple threads.
System.Collections.ImmutableSystem.Collections.Immutable Wprowadza Niezmienne kolekcje i oferuje linki do typów kolekcji.Introduces the immutable collections and provides links to the collection types.

Tematy pomocyReference

System.Array
System.Collections
System.Collections.Concurrent
System.Collections.Generic
System.Collections.Specialized
System.Linq
System.Collections.Immutable