Java - diferența dintre hashmap, linkedhashmap și treemap, cod q - o rusă (ru)

Toate cele trei clase implementează interfața Map și oferă practic aceleași funcții. Cea mai importantă diferență este ordinea în care are loc iterația prin intrări:







  • HashMap nu oferă nici o garanție cu privire la ordinea iterațiilor. Poate (și va) chiar să se schimbe complet atunci când adaugă elemente noi.
  • TreeMap va itera în funcție de "ordinea naturală" a cheilor, în conformitate cu metoda compareTo () (sau furnizată din afara Comparatorului). În plus, implementează interfața SortedMap. care conține metode care depind de această ordine de sortare.
  • LinkedHashMap va itera în ordinea în care înregistrările au fost plasate pe hartă

"Hashtable" este un nume comun pentru cardurile hash. În contextul clasei Hashtable Java API este depășită, deoarece Java 1.1, înainte de a exista un cadru de colecții. Ar trebui să nu mai fie utilizate, deoarece API aglomerat cu metode învechite, care dublează funcționalitatea și metodele sale sunt sincronizate (care poate reduce productivitatea și, de regulă, este inutil). Utilizați ConcurrrentHashMap în loc de Hashtable.

Prefer preferința vizuală:

Toate cele trei reprezintă o mapare de la chei unice la valori și, prin urmare, implementarea interfeței Map.

HashMap este un card bazat pe ștergerea cheilor. Aceasta susține operațiile O (1) get / put. Cheile trebuie să aibă implementări succesive de hashCode () și equals () pentru a face acest lucru.

LinkedHashMap foarte similar cu un HashMap, dar adaugă conștientizare la ordinea în care sunt adăugate elemente (sau disponibile), astfel încât ordinea de repetare coincide cu plasarea comenzii (sau ordinea de acces, în funcție de parametrii de proiectare).

TreeMap este o copiere bazată pe mapare. Operațiunile sale put / get takes time O (log n). Pentru aceasta, este necesar ca elementele să aibă un mecanism de comparare, fie cu o comparație, fie cu un comparator. Ordinea iterațiilor este determinată de acest mecanism.

Doar o contribuție din propria mea experiență cu hărțile, când voi folosi fiecare dintre ele:

  • HashMap este cel mai util atunci când căutați cea mai bună implementare (rapidă).
  • TreeMap (interfața SortedMap) este cea mai utilă atunci când sunt interesată de sortarea sau sortarea cheilor într-o anumită ordine pe care o definim.
  • LinkedHashMap - combină beneficiile unei ordini garantate cu TreeMap fără a crește costul suportului TreeMap. (Este aproape la fel de rapid ca HashMap). În special, LinkedHashMap oferă, de asemenea, un excelent punct de plecare pentru crearea unui obiect Cache, suprimând metoda removeEldestEntry (). Aceasta vă permite să creați un obiect Cache care poate expira folosind anumite criterii.

Vedeți unde fiecare clasă se află în ierarhia de clasă în următoarea diagramă (mai mare). TreeMap implementează SortedMap și SortedMap și HashMap nu.

HashTable este depreciat și trebuie utilizată clasa ConcurrentHashMap corespunzătoare.

  • Are perechi de valori (chei, valori)
  • Nu există valori cheie de duplicare
  • Neordonate nesortate
  • Acesta permite o cheie nulă și mai mult de o valoare nulă

Hash tabel

  • Ca o carte de tip hash
  • Nu permite chei de null și valori null

LinkedHashMap

  • Aceasta este o versiune comandată a implementării hărții
  • Bazat pe liste legate și structuri de date hash
  • Versiune comandată și sortită
  • Pe baza structurilor de date de tip hash

HashMap absolut nu garantează comanda de iterație. Poate (și va) chiar să se schimbe complet atunci când adaugă elemente noi. TreeMap va itera în funcție de "ordinea naturală" a cheilor în conformitate cu metoda compareTo () (sau comparatorul furnizat din exterior). În plus, implementează interfața SortedMap, care conține metode care depind de această ordine de sortare. LinkedHashMap va itera în ordinea în care înregistrările au fost plasate pe hartă







Aflați cum se schimbă performanța.

O hartă arbore, care este o implementare a unei hărți Sortați. Complexitatea operațiunii put, get, and containsKey este O (log n) din cauza ordinii naturale

@Amit: SortedMap - o interfață, în timp ce un TreeMap - o clasă care implementează SortedMap de interfață. Acest lucru înseamnă că, dacă există un protocol pe care SortedMap îl solicită artiștilor săi. Un arbore, dacă nu este folosit ca arbore de căutare, nu vă poate da date ordonate, deoarece arborele poate fi orice copac. Prin urmare, pentru a obține locul de muncă ca un ordin TreeMap Sortate, el își dă seama SortedMap (de exemplu, binar de căutare copac - BST, BST-echilibrată, cum ar fi AVL și copac RB, chiar copac copac copac), este folosit în principal pentru căutări iterative într-o manieră ordonată).

În NUT-SHELL HashMap. dă datele în O (1), fără a ordona

TreeMap. dă date în O (log N), baza 2. cu chei ordonate

LinkedHashMap. este un tabel Hash cu o listă legată (cred că este indexată-SkipList) abilitatea de a stoca datele așa cum sunt inserate în arbore. Cel mai bun pentru implementarea LRU (folosit recent).

Permiteți-mi să spun simplu:

  • HashMap este implementat ca o tabelă hash și nu există comenzi pentru chei sau valori.
  • TreeMap este implementat pe baza unei structuri de copac rosu-negru și este aranjat de cheie.
  • LinkedHashMap salvează comanda de inserare
  • Hashtable este sincronizat, spre deosebire de HashMap. Ea are aeriene pentru sincronizare. De aceea HashMap ar trebui să fie utilizat în cazul în care programul este thread-safe.

Acestea sunt implementări diferite ale aceleiași interfețe. Fiecare implementare are unele avantaje și unele dezavantaje (inserare rapidă, căutare lentă) sau invers.

Toate cele trei clase sunt HashMap. TreeMap și LinkedHashMap implementează interfața java.util.Map și reprezintă o mapare dintr-o cheie unică la valori.

HashMap conține valori bazate pe cheie.

Conține numai elemente unice.

Poate avea o cheie nulă și mai multe valori zero.

clasa publica HashMap extinde AbstractMap implementează harta, Clonabil, Serializabil

  1. LinkedHashMap conține valori bazate pe cheie.
  2. Conține numai elemente unice.
  3. Poate avea o cheie nulă și mai multe valori zero.

Acesta este același lucru cu HashMap, în schimb acesta acceptă ordinea de inserare. // Consultați Slowdown de clasă de mai jos.

public class LinkedHashMap extinde HashMap implementează harta

  1. TreeMap conține valori bazate pe cheie. Acesta implementează interfața NavigableMap și extinde clasa AbstractMap.
  2. Conține numai elemente unice.
  3. Nu poate avea o cheie nulă, dar poate avea mai multe valori zero.

Acest lucru este la fel ca HashMap suporta în schimb ordinea ascendentă (ordonată folosind ordinea naturală a cheii sale).

clasă publică TreeMap extinde AbstractMap implementează NavigableMap, Clonabil, Serializabil

  1. Hashtable este o matrice a listei. Fiecare listă este cunoscută ca o găleată. Poziția găleții este identificată prin apelarea metodei hashcode (). Hashtable conține valori bazate pe cheie.
  2. Conține numai elemente unice.
  3. Poate că nu are o cheie sau o valoare nulă.
  4. Este sincronizat.

Aceasta este o clasă moștenită.

public class Hashtable extends Dictionary implementează harta, Clonabil, Serializabil

Toată lumea oferă o cheie-> carte de valoare și metoda de iterație prin intermediul tastelor. Cea mai importantă diferență dintre aceste clase este garanțiile de timp și ordinea cheilor.

  1. HashMap oferă 0 (1) căutați și inserați. Cu toate acestea, dacă sortați cheile, ordonarea cheilor este în esență arbitrară. Acesta este implementat de o serie de liste legate.
  2. TreeMap oferă O (log N) și inserție. Cheile sunt comandate, deci dacă aveți nevoie să sortați cheile în ordine ordonată, puteți. Aceasta înseamnă că cheile trebuie să implementeze interfața comparabilă. TreeMap este implementat de un copac rosu-negru.
  3. LinkedHashMap oferă 0 (1) căutări și inserări. Cheile sunt ordonate în ordinea inserării. Se realizează prin găleți dublu conectați.

Imaginați-vă că ați trecut un TreeMap gol, HashMap și LinkedHashMap la următoarea funcție:

Rezultatul pentru fiecare va arăta astfel.

Pentru HashMap, producția a fost în propriile teste, dar ar putea fi orice comandă. Atunci când comandați, nu există nicio garanție.
Tremap, rezultatul a fost,
LinkedList, rezultatul a fost,

HashMap
Poate conține o cheie nulă.

HashMap nu acceptă comanda.

Un TreeMap nu poate conține o cheie nulă.

TreeMap susține ordinea ascendentă.

LinkedHashMap poate fi utilizat pentru a menține ordinea de inserare prin care sunt inserate cheile în hartă sau poate fi de asemenea utilizat pentru a menține comanda de acces care accesează cheile.

1) harta HashMap = nou HashMap ();

2) Harta TreeMap = noul TreeMap ();

3) Harta LinkedHashMap = noul LinkedHashMap ();







Trimiteți-le prietenilor: