9, problema principală despre hartă în Java

9, principalele probleme ale hărții în Java

9, problema principală despre hartă în Java

original
Să ne amintim că harta - date structurate este compus dintr-un set de perechi cheie-valoare, iar fiecare tastă poate fi folosită o singură dată într-o hartă. Această temă relevă 9 întrebări majore cu privire la modul de utilizare Map în Java, și întruchipa (punerea în aplicare a) clase. Pentru simplitate, voi folosi în exemplele de generalizare. Pentru că, voi scrie, pur și simplu hartă. fără a specifica o hartă de calificare. Dar puteți presupune că ambele valori K și V sunt comparabile, ceea ce înseamnă că K se extinde Comparabil, și V, de asemenea, se extinde comparabili.

0 Adresa Harta în Lista
În Java, interfața hartă oferă trei tipuri de colecții: un set de chei, un set de valori și un set de chei-valoare. Toate acestea pot fi transformate într-o listă cu ajutorul constructor sau metoda addAll (). Codul de mai jos demonstrează cum să facă file de ArrayList a hărții.


1. Du-te prin toate valorile din hartă.
Trecerea fiecărei perechi de chei-valoare - bază, procedura de bază de trecere pe hartă. În Java, perechea fiecărui este stocat în câmpul Map numit Map.Entry. Harta .entrySet () returnează un set de chei-valoare, pentru că cel mai eficient mod de a merge prin toate Harta valori vor:

Deci, putem folosi iterator, în special în versiunile mai tinere ale JDK 1.5


2. Organizarea Harta pentru chei
Harta cheile prin care se dispune o altă procedură de multe ori îndeplinite. Primul mod: adăugați Map.Entry în listă, și reformulate folosind un comparator care sortează de valori.

O altă modalitate este de a utiliza SortedMap. că totul se acumulează mai mult și cheile în ordine. Dar, toate cheile în același timp, trebuie să pună în aplicare comparabilă sau primite de către comparator.
Una dintre clasele de a pune în aplicare SortedMap - TreeMap. constructorul sau ia comparator. Codul de mai jos arată cum să transforme o hartă obișnuită în ordonată.


3. Organizarea Harta pe valori
Adăugarea unei hărți listă și lucrările de sortare ulterioare, și în acest caz, dar este necesar în acest moment pentru a lua .getValue de intrare (). Codul de mai jos este aproape la fel ca înainte.

Putem folosi în continuare SortedMap în acest caz, dar numai în cazul în care valorile sunt unice. În acest caz, puteți transforma perechea cheie-valoare în cheie-valoare. Această soluție are o limitare strictă și nu este recomandat de mine.

bibliotecă Guava sprijină, de asemenea, diferite moduri de a inițializa colecții statice și imuabile. Pentru a explora mai multe beneficii utilități Guava pentru colectarea constantă, consultați instrucțiunile din Colecția Constant Guava.

5. Diferența dintre HashMap, TreeMap și Hashtable
Există trei principale interfață încarnări Harta în Java: HashMap. TreeMap. și Hashtable. Principalele diferențe sunt după cum urmează:
  • Ordinea de trecere. HashMap și hashtable nu dau garanții la comandă în hartă; în special, acestea nu garantează că ordinul va rămâne același timp. Dar TreeMap va organiza toate valorile din tastele „ordinii naturale“ sau un comparator.
  • Acceptabile din perechile cheie-valoare. HashMap vă permite să aveți cheia și null null. Hashtable nu permite cheie nulă sau valoare este nulă. Dacă TreeMap folosește ordinea naturală, sau de comparație nu permite cheie nulă. excepție va fi aruncată.
  • Sincronizarea. Numai Hashtable este sincronizat, restul - nr. Dar, „în cazul în care fire de realizare, este recomandat să nu-l folosească în loc de HashMap hashtable».
O comparație mai detaliată

7. O copie superficială Harta
Aproape toate, dacă nu toate, hartă în Java conțin un constructor copy altă hartă. Dar procedura de copiere nu este sincronizat. Ce înseamnă când un fir de copii pe hartă, celălalt poate schimba structura sa. Pentru a preveni o bruscă de rezervă de sincronizare, una dintre ele trebuie să fie utilizate într-un astfel de caz Collections.synchronizedMap ().

Un alt mod interesant de a copia suprafața - folosind metoda clona (). Dar nu este recomandat chiar creatorul cadrului Java Colecții, John Bloch. Disputa „constructorul de copiere împotriva clonării“, el ocupă poziția de:
Citat: „.. am citat de multe ori clona metodă publică într-o anumită clasă, așa cum oamenii se așteaptă ca ei să vadă acolo ... e păcat că clonarea este rupt, dar sa întâmplat ... Clonarea este un punct slab, și cred că oamenii ar trebui să fie conștienți de limitele sale.“ Din acest motiv, eu nici măcar nu vă arată cum să utilizați metoda clone () pentru a copia o hartă

8. Creați o hartă goală
Dacă harta este neschimbată, utilizați

Sau de a folosi orice altă incarnare. de exemplu