Typy kolekcí Hashtable a Dictionary
System.Collections.Hashtable Třídy a System.Collections.Generic.Dictionary<TKey, TValue> a System.Collections.Concurrent.ConcurrentDictionary<TKey, TValue> generic třídy implementovat System.Collections.IDictionary rozhraní. Obecná třída Dictionary<TKey, TValue> rovněž implementuje obecné rozhraní IDictionary<TKey, TValue>. Každý element v těchto kolekcích je tedy pár klíče a hodnoty.
Objekt Hashtable se skládá z bloků, které obsahují prvky z kolekce. Blok je virtuální podskupina prvků v Hashtable, což oproti většině jiných kolekcí usnadňuje a zrychluje vyhledávání a načítání. Každá plechovka přidružen kód hash, který je generován pomocí funkce hash a je založen na klíče prvku.
Obecného HashSet<T> je třída Neseřazená kolekce obsahující jedinečné prvky. Další informace o této kolekci naleznete Typ kolekce HashSet.
Funkce hash je algoritmus, který vrátí číselnou hodnotu hash založenou na klíči. Klíč je hodnota některé vlastnosti ukládaného objektu. Funkce hash musí vždy vrátit stejnou hodnotu hash pro stejný klíč. Funkce hash může generavat stejnou hodnotu hash pro dva různé klíče, ale u funkce hash, která generuje jedinečnou hodnotu hash pro každý jedinečný klíč, je výsledkem lepší výkon při načítání prvků z hash tabulky.
Každý objekt, který slouží jako element v Hashtable, musí být schopen generovat pro sebe hodnotu hash pomocí implementace metody GetHashCode. Můžete však zadat také funkci hash u všech prvků v Hashtable pomocí konstruktoru Hashtable, který přijímá, jako jeden ze svých pamametru, implementaci IHashCodeProvider.
Pokud je objekt přidán do Hashtable, uloží se do bloku, který souvisí s hodnotou hash, která odpovídá hodnotě hash od objektu. Pokud je hodnota vyhledána v Hashtable, pak je hodnota hash generována pro tuto hodnotu, a je vyhledáván blok, který je asociován s příslušnou hodnotou hash.
Funkce hash pro řetězec může například vzít ASCII kódy každého znaku v řetězci a sečíst je, aby generoval hodnotu hash. Řetězec piknik by měl hodnotu hash, která se liší od hodnoty hash pro řetězec košík. Proto by byly řetězce piknik a košík v různých blocích. Naopak stressed a desserts by měly stejnou hodnotu hash a byly by ve stejném bloku.
Dictionary<TKey, TValue> a ConcurrentDictionary<TKey, TValue>třídy mají stejné funkce jako Hashtable Třída Dictionary<TKey, TValue> určitého typu (jiného než Object) poskytuje lepší výkon pro typy hodnot než Hashtable. Důvodem je, že prvky Hashtable jsou typu Object. Proto zabalení a rozbalení obvykle nastává při ukládání nebo načítání typu hodnoty. ConcurrentDictionary<TKey, TValue>Být použita třída při přístupu více podprocesů může být ke kolekci současně.
Viz také
Odkaz
System.Collections.Generic.IDictionary<TKey, TValue>
System.Collections.Concurrent.ConcurrentDictionary<TKey, TValue>