Dicționar vs Hashtable
Dicționarul este tipărit (nu are nevoie de bloxing), un Hashtable nu este (nu are nevoie de valoare). Hashtable are un mod mai frumos de a obține o valoare decât dicționarul IMHΟ, deoarece întotdeauna arată că valoarea este un obiect. Deoarece dacă folosiți .NET 3.5, este ușor să scrieți un extensiu de metode pentru dicționar pentru a obține un comportament similar.
Clasa Hashtable este o clasă de dicționar de tip specific care folosește o valoare intregă (numită hash) pentru a ajuta la păstrarea cheilor. Clasa Hashtable folosește hash-ul pentru a accelera căutarea pentru o cheie specifică din coloană. Fiecare obiect din .NET derivă din clasa Object. Această clasă suporta metoda GetHash, care returnează un întreg care identifică în mod unic obiectul. Clasa Hashtable este o cultură foarte eficientă în general. Numai problema cu clasa Hashtable este că necesită un pic mai mare, iar pentru micile colecții (mai puțin de zece elemente), oversul poate împiedica perfecționarea.
Există o diferență mai mare între un HashTable și un Dicționar. Dacă utilizați indexatorii pentru a obține o valoare a unui HashTable, HashTable va reveni cu succes la zero pentru un element existent, în timp ce Dicționarul va avea o eroare dacă încercați să accesați un element utilizând un indexator care nu există în dicționar.
HashTable este clasa de bază care este slabă tastată; clasa abstractă DictionaryBase este strounly tastată și utilizează în mod intern un HashTable.
Un lucru ciudat a observat about Dicționarul este, atunci când adăugăm mai multe intrări în Dicționar, este menținut domeniul în care sunt adăugate înregistrările. Astfel, dacă aplicați un cuvânt în dicționar, veți obține recordurile în același loc în care le-ați inserat. Deși acest lucru nu este adevărat cu HashTable, atunci când adăugați aceleași recorduri în Hashtable, nu este menținut. Dacă "Dicționarul se bazează pe Hashtable" este adevărat, de ce Dicționarul menține ordinea dar HashTable nu dă?
Deoarece se comportă diferit, este pentru că Dicționarul generic implementează un hashtable, dar nu se bazează pe System.Cоllectiоns.Hashtable. Implementarea dicționarului generic se bazează pe alocarea perechilor cheie-valoare dintr-o listă. Acestea sunt apoi indexate cu gălețile hashtable pentru randоm acces, dar atunci când se întoarce un enumerator, acesta merge doar lista în ordine secvențială - care va fi oder de inserție în timp ce intrările nu sunt re-utilizate.