Megosztás a következőn keresztül:


Kivonatoló és szótárgyűjtemény-típusok

Az System.Collections.Hashtable osztály és az System.Collections.Generic.Dictionary<TKey,TValue>System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> általános osztályok implementálják a System.Collections.IDictionary felületet. Az Dictionary<TKey,TValue> általános osztály az általános felületet is implementálja IDictionary<TKey,TValue> . Ezért a gyűjtemények minden eleme kulcs-érték pár.

Az Hashtable objektumok gyűjtőkből állnak, amelyek a gyűjtemény elemeit tartalmazzák. A gyűjtő az elemek virtuális alcsoportja a gyűjteményen belül, ami megkönnyíti és gyorsítja a Hashtablekeresést és a beolvasást, mint a legtöbb gyűjteményben. Minden gyűjtő egy kivonatkódhoz van társítva, amely kivonatfüggvény használatával jön létre, és az elem kulcsán alapul.

Az általános HashSet<T> osztály egy rendezetlen gyűjtemény, amely egyedi elemeket tartalmaz.

A kivonatfüggvény egy algoritmus, amely egy kulcson alapuló numerikus kivonatkódot ad vissza. A kulcs a tárolt objektum bizonyos tulajdonságának értéke. A kivonatoló függvénynek mindig ugyanazt a kivonatkódot kell visszaadnia ugyanahhoz a kulcshoz. A kivonatoló függvények két különböző kulcshoz is létrehozhatják ugyanazt a kivonatkódot, de egy kivonatfüggvény, amely minden egyes egyedi kulcshoz egyedi kivonatkódot hoz létre, jobb teljesítményt eredményez a kivonattáblából származó elemek lekérésekor.

A metódus implementálásával GetHashCode minden olyan objektumnak, amelyet egy Hashtable elemként használnak, képesnek kell lennie kivonatkódot létrehozni önmagához. Egy olyan konstruktor használatával Hashtable azonban megadhat kivonatfüggvényt Hashtable is, amely az egyik paramétereként fogadja el a IHashCodeProvider megvalósítást.

Amikor hozzáad egy objektumot egy Hashtableobjektumhoz, az az objektum kivonatkódjának megfelelő kivonatkóddal társított gyűjtőben lesz tárolva. Amikor egy értéket keres a Hashtablefájlban, a rendszer létrehozza az adott érték kivonatkódját, és a rendszer megkeresi a kivonatkódhoz társított gyűjtőt.

Egy sztring kivonatfüggvénye például a sztring egyes karaktereinek ASCII-kódjait veszi fel, és összeadja őket egy kivonatkód létrehozásához. A "piknik" sztring olyan kivonatkóddal rendelkezik, amely eltér a "basket" sztring kivonatkódjától; ezért a "piknik" és a "kosár" sztringek különböző gyűjtőkben lennének. Ezzel szemben a "stressed" és a "desszertek" ugyanazzal a kivonatkóddal rendelkeznének, és ugyanabban a gyűjtőben lennének.

ConcurrentDictionary<TKey,TValue> Az Dictionary<TKey,TValue> és az osztályok ugyanazokkal a funkciókkal rendelkeznek, mint az Hashtable osztály. Egy Dictionary<TKey,TValue> adott típusú (nem Object) értéktípus jobb teljesítményt nyújt, mint az Hashtable értéktípusok esetében. Ennek az az oka, hogy az elemek Hashtable típusa típus Object, ezért a dobozolás és a kicsomagolás általában egy értéktípus tárolásakor vagy lekérésekor fordul elő. Az ConcurrentDictionary<TKey,TValue> osztályt akkor kell használni, ha egyszerre több szál is hozzáfér a gyűjteményhez.

Lásd még