Diferența dintre dicționar și dicționar Hashtable

Anonim

Dicționar vs Hashtable

Dicționarul este tipărit (nu este necesar să fie tipărite), un Hashtable nu este numerele de valori trebuie să fie mai mari). 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. Deci, dacă folosiți. NET 3. 5, este ușor să scrieți un dicționar extensiologic 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 stogege de cheile ei. 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. Problema doar cu clasa Hashtable este că necesită un pic mai mare, iar pentru persoane mici (mai puțin de zece elemente), depășirea 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 un 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 observat about Dicționarul este, atunci când adăugăm mai multe intrări în dicționar, este menținută ordinea î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 oerderul, dar HashTable nu reușește?

Deoarece se comportă diferit, este pentru că Generic Dictionary 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 când se întoarce un enumerator, acesta merge doar în listă secundară - care va fi oerder de inserție ca și când intrările nu vor fi reutilizate.