Poredaj HashMap u Javi

1. Uvod

U ovom brzom vodiču naučit ćemo kako razvrstati a HashMap na Javi.

Točnije, osvrnut ćemo se na sortiranje HashMap unosi prema ključu ili vrijednosti pomoću:

  • TreeMap
  • ArrayList i Collections.sort ()
  • TreeSet
  • Koristiti Stream API, i konačno,
  • Koristiti Guava knjižnica

2. Korištenje a TreeMap

Kao što znamo, unosi ključeve TreeMap sortiraju se prema njihovom prirodnom redoslijedu. Ovo je dobro rješenje kada želimo sortirati parove ključ / vrijednost prema njihovom ključu. Dakle, ideja je izgurati sve podatke iz našeg HashMap u TreeMap.

Za početak, definirajmo a HashMap i inicijalizirajte ga s nekim podacima:

Karta karte = novi HashMap (); Zaposlenik zaposlenik1 = novi zaposlenik (1L, "Mher"); map.put (zaposlenik1.getName (), zaposlenik1); Zaposlenik zaposlenik2 = novi zaposlenik (22L, "Annie"); map.put (zaposlenik2.getName (), zaposlenik2); Zaposlenik zaposlenik3 = novi zaposlenik (8L, "John"); map.put (zaposlenik3.getName (), zaposlenik3); Zaposlenik zaposlenik4 = novi zaposlenik (2L, "George"); map.put (zaposlenik4.getName (), zaposlenik4);

Za Zaposlenik razred, napominjemo da smo implementirali Usporedive:

javna klasa Zaposlenik implementira Usporediv {private Long id; privatni naziv niza; // konstruktor, getteri, postavljači // override equals i hashCode @Override public int compareTo (zaposlenik zaposlenik) {return (int) (this.id - worker.getId ()); }}

Dalje, unose pohranjujemo u TreeMap korištenjem njegovog konstruktora:

TreeMap sorted = nova TreeMap (karta);

Ili staviSve metoda kopiranja podataka:

TreeMap sorted = new TreeMap (); sorted.putAll (karta);

I to je to! Da bismo bili sigurni da su naši unosi na karti poredani po ključu, isprintajmo ih:

Annie = Zaposlenik {id = 22, name = "Annie"} George = Zaposlenik {id = 2, name = "George"} John = Zaposlenik {id = 8, name = "John"} Mher = Zaposlenik {id = 1, name = "Mher"}

Kao što vidimo, tipke su poredane prirodnim redoslijedom.

3. Korištenje ArrayList

Unose na karti naravno možemo sortirati uz pomoć ArrayList. Ključna razlika u odnosu na prethodnu metodu je ta mi ne održavamo Karta sučelje ovdje.

3.1. Poredaj po ključu

Učitajmo skup ključeva u ArrayList:

Popis workerByKey = novi ArrayList (map.keySet ()); Collections.sort (workerByKey);

A izlaz je:

[Annie, George, John, Mher]

3.2. Poredaj po vrijednosti

Što ako želimo sortirati vrijednosti karte po iskaznica polje od Zaposlenik objekt? Možemo koristiti ArrayList i za to.

Prvo, kopirajmo vrijednosti na popis:

Popis workerById = novi ArrayList (map.values ​​());

I nakon toga to sortiramo:

Collections.sort (workerById);

Zapamtite da ovo djeluje jer Zaposlenik provodi Usporedive sučelje. U suprotnom, trebali bismo definirati ručnu usporedbu za naš poziv Zbirke.sort.

Da bismo provjerili rezultate, ispisujemo zaposlenikById:

[Zaposlenik {id = 1, name = "Mher"}, Zaposlenik {id = 2, name = "George"}, Zaposlenik {id = 8, name = "John"}, Zaposlenik {id = 22, name = "Annie "}]

Kao što vidimo, predmeti su razvrstani prema njihovim iskaznica polje.

4. Korištenje a TreeSet

U slučaju da mi ne želite prihvatiti dvostruke vrijednosti u našoj razvrstanoj kolekciji, postoji lijepo rješenje s TreeSet.

Prvo, dodajmo nekoliko ponovljenih unosa na našu početnu kartu:

Zaposlenik zaposlenik5 = novi zaposlenik (1L, "Mher"); map.put (zaposlenik5.getName (), zaposlenik5); Zaposlenik zaposlenik6 = novi zaposlenik (22L, "Annie"); map.put (zaposlenik6.getName (), zaposlenik6);

4.1. Poredaj po ključu

Da biste kartu razvrstali prema ključnim unosima:

SortedSet keySet = new TreeSet (map.keySet ());

Ispisujemo keySet i pogledajte izlaz:

[Annie, George, John, Mher]

Sada imamo ključeve karte poredane bez duplikata.

4.2. Poredaj po vrijednosti

Isto tako, za vrijednosti karte kod za pretvorbu izgleda ovako:

Vrijednosti SortedSet = novi TreeSet (map.values ​​());

A rezultati su:

[Zaposlenik {id = 1, name = "Mher"}, Zaposlenik {id = 2, name = "George"}, Zaposlenik {id = 8, name = "John"}, Zaposlenik {id = 22, name = "Annie "}]

Kao što vidimo, u izlazu nema duplikata. To funkcionira s prilagođenim objektima kada ih poništimo jednako i hashCode.

5. Korištenje lambda i potoka

Od Java 8, za razvrstavanje karte možemo koristiti Stream API i lambda izraze. Sve što trebamo je nazvati razvrstano metoda preko karte potok cjevovod.

5.1. Poredaj po ključu

Za razvrstavanje po ključu koristimo uspoređujućiByKey usporednik:

map.entrySet () .stream (). sortirano (Map.Entry.comparingByKey ()) .forEach (System.out :: println);

Konačni za svakoga pozornica ispisuje rezultate:

Annie = Zaposlenik {id = 22, name = "Annie"} George = Zaposlenik {id = 2, name = "George"} John = Zaposlenik {id = 8, name = "John"} Mher = Zaposlenik {id = 1, name = "Mher"}

Prema zadanim postavkama način sortiranja je uzlazni.

5.2. Poredaj po vrijednosti

Naravno, možemo sortirati po Zaposlenik i predmeti:

map.entrySet () .stream (). sortirano (Map.Entry.comparingByValue ()) .forEach (System.out :: println);

Kao što vidimo, gornji kod ispisuje kartu razvrstanu po iskaznica polja od Zaposlenik objekti:

Mher = Zaposlenik {id = 1, name = "Mher"} George = Zaposlenik {id = 2, name = "George"} John = Zaposlenik {id = 8, name = "John"} Annie = Zaposlenik {id = 22, name = "Annie"}

Uz to, rezultate možemo prikupiti na novu mapu:

Rezultat karte = map.entrySet () .stream (). Sortirano (Map.Entry.comparingByValue ()) .collect (Collectors.toMap (Map.Entry :: getKey, Map.Entry :: getValue, (oldValue, newValue) - > oldValue, LinkedHashMap :: novo));

Imajte na umu da smo svoje rezultate prikupili u LinkedHashMap. Prema zadanim postavkama, Kolekcionari.toMap vraća novu HashMap, ali kao što znamo, HashMap ne garantira ponavljanjenarudžba, dok LinkedHashMap čini.

6. Korištenje Guave

Na kraju, knjižnica koja nam omogućuje sortiranje HashMap je Guava. Prije nego što započnemo, bilo bi korisno provjeriti naše zapise o kartama u Guavi.

Prvo, proglasimo Naručivanje kao što želimo poredati svoju kartu po ZaposlenikaIskaznica polje:

Naručivanje naturalOrdering = Ordering.natural () .onResultOf (Functions.forMap (karta, null));

Sad, sve što trebamo je koristiti ImmutableSortedMap za ilustraciju rezultata:

ImmutableSortedMap.copyOf (map, naturalOrdering);

I još jednom, izlaz je karta koju je naredio iskaznica polje:

Mher = Zaposlenik {id = 1, name = "Mher"} George = Zaposlenik {id = 2, name = "George"} John = Zaposlenik {id = 8, name = "John"} Annie = Zaposlenik {id = 22, name = "Annie"}

7. Sažetak

U ovom smo članku pregledali nekoliko načina sortiranja a HashMap po ključu ili po vrijednosti.

I pomno smo pogledali kako to možemo učiniti kada je atribut prilagođena klasa implementacijom Usporedive.

Napokon, kao i uvijek, kod korišten tijekom rasprave možete pronaći na GitHubu.


$config[zx-auto] not found$config[zx-overlay] not found