Sdílet prostřednictvím


Seřazené typy kolekcí

Třída System.Collections.SortedList, obecná třída System.Collections.Generic.SortedList<TKey,TValue> a obecná třída System.Collections.Generic.SortedDictionary<TKey,TValue> jsou podobné třídě Hashtable a obecné třídě Dictionary<TKey,TValue> tím, že implementují rozhraní IDictionary, a jelikož udržují své prvky v pořadí podle klíče, nemají vlastnost vložení a načítání charakteristickou pro O(1) operace hash tabulek. Tři třídy mají několik společných funkcí:

Následující tabulka uvádí některé rozdíly mezi dvěma třídami seřazených seznamů a SortedDictionary<TKey,TValue> třídou.

SortedList neobecná třída a SortedList<TKey,TValue> obecná třída SortedDictionary<TKey,TValue> obecná třída
Vlastnosti, které vracejí klíče a hodnoty, jsou indexovány, což umožňuje efektivní indexované načítání. Žádné indexované získávání dat.
Načtení je O(log n). Načtení je O(log n).
Vložení a odebrání jsou obecně O(n); vložení je však O(log n) pro data, která jsou již v pořadí řazení, takže každý prvek se přidá na konec seznamu. (Předpokládá se, že změna velikosti není nutná.) Vložení a odebrání jsou O(log n).
Používá méně paměti než SortedDictionary<TKey,TValue>. Používá více paměti než SortedList negenerická třída a SortedList<TKey,TValue> obecná třída.

Pro seřazené seznamy nebo slovníky, které musí být přístupné souběžně z více vláken, můžete přidat logiku řazení do třídy odvozené od ConcurrentDictionary<TKey,TValue>. Při zvažování neměnnosti jsou následující neměnné typy řazeny podle podobných sémantických pravidel: ImmutableSortedSet<T> a ImmutableSortedDictionary<TKey,TValue>.

Poznámka:

Pro hodnoty, které obsahují vlastní klíče (například záznamy zaměstnanců obsahující číslo ID zaměstnance), můžete vytvořit kolekci s klíči, která má určité charakteristiky seznamu a některé charakteristiky slovníku odvozením z KeyedCollection<TKey,TItem> obecné třídy.

Počínaje rozhraním .NET Framework 4 poskytuje třída SortedSet<T> automaticky vyvažující strom, který udržuje data v seřazeném pořadí po vložení, odstranění a hledání. Tato třída a HashSet<T> třída implementují ISet<T> rozhraní.

Viz také