what is hashmap java
Ovaj vodič za HashMap Java objašnjava što je HashMap u Javi i kako ga koristiti. Sadrži kako prijaviti, inicijalizirati, ponoviti, implementirati i ispisati HashMap:
HashMap u Javi zbirka je koja se temelji na mapi i sastoji se od parova ključ / vrijednost. HashMap se označava sa ili. Elementu HashMap može se pristupiti pomoću ključa, tj. Moramo znati ključ za pristup elementu HashMap.
HashMap koristi tehniku nazvanu 'raspršivanje'. U raspršivanju se duži niz pretvara u kraći niz primjenom nekog algoritma ili 'hash funkcije'. Niz se pretvara u kraći niz jer pomaže bržem pretraživanju. Također se koristi za učinkovito indeksiranje.
=> Posjetite ovdje za ekskluzivnu seriju udžbenika za Java.
Što ćete naučiti:
- HashMap u Javi
- Java karta vs HashMap
- Zaključak
HashMap u Javi
HashMap je sličan HashTableu, s tom razlikom što HashMap nije sinkroniziran i dopušta null vrijednosti za ključ i vrijednost.
Neke važne karakteristike HashMap-a dane su u nastavku:
- HashMap je implementiran na Javi u klasi “Hashmap” koja je dio paketa java.util.
- Klasa HashMap nasljeđuje od klase “AbstractMap” koja djelomično implementira sučelje Map.
- HashMap također implementira sučelja koja se mogu klonirati i koja se mogu serirati.
- HashMap dopušta dvostruke vrijednosti, ali ne dopušta dvostruke ključeve. HashMap također dopušta više null vrijednosti, ali null ključ može biti samo jedan.
- HashMap nije sinkroniziran i također ne jamči redoslijed elemenata.
- Klasa Java HashMap ima početni kapacitet 16, a zadani (početni) faktor učitavanja je 0,75.
Kako objaviti hash-kartu na Javi?
HashMap u Javi dio je paketa java.util. Stoga, ako trebamo koristiti HashMap u našem kodu, prvo moramo uvesti klasu implementacije pomoću jedne od sljedećih izjava:
import java.util.*;
ILI
import java.util.HashMap;
Opća deklaracija klase HashMap je:
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable
Ovdje je K => vrsta ključeva prisutnih na karti
V => vrsta vrijednosti preslikanih u ključeve na karti
Stvorite HashMap
HashMap u Javi može se stvoriti na sljedeći način:
import java.util.HashMap; HashMap cities_map = new HashMap ();
Gornja izjava prvo uključuje klasu HashMap u Javi. Zatim u sljedećoj izjavi kreiramo HashMap pod nazivom ‘maps_map’ s tipom ključa kao Integer i Values kao String.
Jednom kad se stvori HashMap, moramo je inicijalizirati vrijednostima.
Kako inicijalizirati hash kartu?
HashMap možemo inicijalizirati metodom put stavljanjem nekih vrijednosti na mapu.
Program u nastavku prikazuje inicijalizaciju HashMap-a u Javi.
import java.util.*; class Main{ public static void main(String args()){ //create a HashMap and print HashMap colorsMap=new HashMap(); System.out.println('Initial Map: '+colorsMap); //put some initial values into it using put method colorsMap.put(100,'Red'); colorsMap.put(101,'Green'); colorsMap.put(102,'Blue'); //print the HashMap System.out.println('After adding elements:'); for(Map.Entry m:colorsMap.entrySet()){ System.out.println(m.getKey()+' '+m.getValue()); } } }
Izlaz:
Početna karta: {}
Nakon dodavanja elemenata:
100 Mreža
101 Zelena
102 Plava
Kako HashMap djeluje interno?
Znamo da je HashMap zbirka parova ključ / vrijednost i koristi se tehnikom koja se naziva 'Hashing'. Interno, HashMap je niz čvorova. HashMap koristi polje i LinkedList za spremanje parova ključ / vrijednost.
Dolje je dana struktura čvora HashMap-a koja je programski predstavljena kao klasa.
Kao što se vidi iz gornjeg prikaza čvora, čvor ima strukturu sličnu čvoru povezanog popisa. Niz tih čvorova naziva se kanta. Svaka skupina može imati isti kapacitet, a može imati i više čvorova.
Na izvedbu HashMap-a utječu dva parametra:
(i) Početni kapacitet: Kapacitet se definira kao broj segmenata u HashMap-u. Početni kapacitet definira se kao kapacitet objekta HashMap kada je stvoren. Kapacitet HashMap-a uvijek se pomnoži s 2.
(ii) LoadFactor: LoadFactor je parametar koji mjeri prilikom ponovnog uklapanja - povećava se kapacitet.
Imajte na umu da će, ako je kapacitet velik, faktor opterećenja biti mali, jer neće biti potrebno ponovno uvijanje. Slično tome, kada je kapacitet nizak, faktor opterećenja bit će visok jer ćemo morati često preusmjeravati. Stoga bismo trebali paziti da pažljivo odaberemo ova dva čimbenika kako bismo dizajnirali učinkovitu hashMap.
Kako obraditi HashMap?
Potrebno je prijeći HashMap za manipulaciju ili ispis parova ključ / vrijednost.
Postoje dva načina na koja možemo preći ili ponoviti HashMap.
- Korištenje for petlje
- Korištenje while petlje i iteratora.
Java program u nastavku prikazuje provedbu obje ove metode.
Prvo dohvaćamo skup unosa iz HashMap-a pomoću metode entrySet, a zatim prelazimo preko skupa pomoću petlje for. Zatim ispisujemo parove ključ / vrijednost pomoću metoda getKey () i getValue ().
Da bismo prešli HashMap pomoću petlje while, prvo postavimo iterator za HashMap, a zatim pristupimo parovima ključ / vrijednost pomoću iteratora.
import java.util.*; public class Main{ public static void main(String () args) { //create a HashMap and initialize it HashMap cities_map = new HashMap(); cities_map.put(10, 'MUM'); cities_map.put(1, 'DL'); cities_map.put(20, 'PUN'); cities_map.put(7, 'GOA'); cities_map.put(3, 'HYD'); //print using for loop System.out.println('HashMap using for Loop:'); System.out.println(' KEY VALUE'); for (Map.Entry mapSet : cities_map.entrySet()) { System.out.println(' '+mapSet.getKey() + ' ' + mapSet.getValue()); } //print using while loop with iterator System.out.println('HashMap using while Loop:'); System.out.println(' KEY VALUE'); Iterator iterator = cities_map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry mapSet2 = (Map.Entry) iterator.next(); System.out.println(' '+mapSet2.getKey() + ' ' + mapSet2.getValue()); } } }
Izlaz:
HashMap koristi za Loop:
KLJUČNA VRIJEDNOST
1 DL
3 DUGO
20 PUN
7 GOA
10 MAMA
HashMap pomoću while Loop:
KLJUČNA VRIJEDNOST
1 DL
3 DUGO
20 PUN
7 GOA
10 MAMA
Ispišite Hash kartu
Pogledajmo još jedan primjer ispisa hashMap pomoću foreach petlje prikazane u donjem programu.
import java.util.HashMap; public class Main { public static void main(String() args) { // create a HashMap and initialize HashMap colors = new HashMap(); colors.put('Red', 1); colors.put('Orange', 5); colors.put('Magenta', 8); //print the HashMap System.out.println('HashMap contents:'); System.out.println(' KEY VALUE'); for (String i : colors.keySet()) { System.out.println(' ' + i + ' ' + colors.get(i)); } } }
Izlaz:
Sadržaj HashMap-a:
KLJUČNA VRIJEDNOST
Mreža 1
Magenta 8
Narančasta 5
Konstruktor / metode HashMap-a u Javi
Tablice u nastavku prikazuju konstruktore i metode koje pruža klasa HashMap u Javi.
Konstruktori
Prototip konstruktora | Opis | |
---|---|---|
staviSve | void putAll (karta na karti) | U HashMap ubacuje navedene elemente ‘map’. |
HashMap () | Zadani konstruktor. | |
HashMap (karta m) | Stvara novu HashMap od datog objekta karte m. | |
HashMap (unutarnji kapacitet) | Stvara novu HashMap s početnim kapacitetom danim argumentom 'kapacitet'. | |
HashMap (int kapacitet, plutajući faktor opterećenja) | Stvara novu HashMap koristeći vrijednosti kapaciteta i loadFactor koje pruža konstruktor. |
Metode
Metoda | Prototip metode | Opis |
---|---|---|
čisto | void clear () | Briše sva preslikavanja u HashMap-u |
prazno je | logički isEmpty () | Provjerava je li HashMap prazan. Vraća ako je da. |
klon | Klon objekta () | Vraća plitku kopiju bez kloniranja preslikavanja ključeva i vrijednosti u HashMap-u. |
entrySet | Postavi entrySet () | Vraća preslikavanja u HashMap-u kao zbirku |
skup tipki | Postavi keySet () | Vraća skup ključeva u HashMap-u. |
staviti | V put (ključ objekta, vrijednost objekta) | Umeće unos ključ / vrijednost u HashMap. |
putIfAbsent | V putIfAbsent (K ključ, V vrijednost) | Umeće dati par ključ / vrijednost u HashMap ako već nije prisutan. |
ukloniti | V uklanjanje (tipka objekta) | Izbrišite unos s HashMap-a za dati ključ. |
ukloniti | logičko uklanjanje (ključ objekta, vrijednost objekta) | Briše zadani par ključ / vrijednost s HashMap-a. |
izračunati | V izračunavanje (tipka K, BiFunction remappingFunction) | Izračunava mapiranje pomoću 'funkcije preslikavanja' za zadani ključ i njegovu trenutnu vrijednost ili nulu. |
Metoda | Prototip metode | Opis |
computeIfAbsent | V computeIfAbsent (tipka K, preslikavanje funkcije Funkcija) | Izračunava mapiranje pomoću funkcije 'mappingFunction' i ubacuje parove ključ / vrijednost ako već nije prisutan ili je null. |
computeIfPresent | V computeIfPresent (tipka K, BiFunction remappingFunction) | Izračunava novo mapiranje pomoću funkcije 'remappingFunction' s obzirom na ključ ako je ključ već prisutan i nije null. |
sadržiVrijednost | boolean containsValue (vrijednost objekta) | Provjerava postoji li zadana vrijednost u HashMap-u i vraća true ako da. |
sadržiKljuč | boolean containsKey (ključ objekta) | Provjerava je li zadani ključ prisutan u HashMap-u i vraća vrijednost true ako da. |
jednako | boolean jednako (Objekt o) | Uspoređuje zadani objekt s HashMapom. |
za svakoga | void forEach (BiConsumer akcija) | Izvršava zadanu 'radnju' za svaki od unosa u HashMap-u. |
dobiti | V get (tipka objekta) | Vraća objekt koji sadrži zadani ključ s pridruženom vrijednošću. |
getOrDefault | V getOrDefault (Tipka objekta, V defaultValue) | Vraća vrijednost na koju se preslikava dati ključ. Ako nije mapiran, vraća zadanu vrijednost. |
prazno je | logički isEmpty () | Provjerava je li HashMap prazan. |
ići | Spajanje V (tipka K, V vrijednost, BiFunction remappingFunction) | Provjerava je li zadani ključ null ili nije povezan s vrijednošću, a zatim ga pridružuje ne-null vrijednosti pomoću remappingFunction. |
zamijeniti | V zamjena (tipka K, vrijednost V) | Zamjenjuje zadanu vrijednost za navedeni ključ. |
zamijeniti | logička zamjena (tipka K, V oldValue, V newValue) | Zamjenjuje staru vrijednost datog ključa novom vrijednošću |
zamjeni sve | void replaceAll (funkcija BiFunction) | Izvršava zadanu funkciju i zamjenjuje sve vrijednosti u HashMap-u rezultatom funkcije. |
vrijednosti | Vrijednosti zbirke () | Vraća zbirku vrijednosti prisutnih u HashMap-u. |
veličina | veličina int () | Vraća veličinu broja unosa u HashMap-u. |
Implementacija hash-mape
Dalje, implementirat ćemo većinu ovih funkcija u Java program kako bismo bolje razumjeli njihov rad.
Sljedeći Java program prikazuje implementaciju HashMap-a u Javi. Imajte na umu da smo koristili većinu metoda o kojima smo gore govorili.
import java.util.*; public class Main { public static void main(String args()) { HashMap hash_map = new HashMap(); hash_map.put(12, 'Leo'); hash_map.put(2, 'Seville'); hash_map.put(7, 'Lacy'); hash_map.put(49, 'Lily'); hash_map.put(3, 'Dillon'); System.out.println('HashMap contents:'); System.out.println(' KEY VALUE'); //display HashMap contents Set setIter = hash_map.entrySet(); Iterator map_iterator = setIter.iterator(); while(map_iterator.hasNext()) { Map.Entry map_entry = (Map.Entry)map_iterator.next(); System.out.println(' '+ map_entry.getKey() + ' ' + map_entry.getValue()); } //get value for the given key String var= hash_map.get(2); System.out.println('Value at index 2 is: '+var); //delete value given the key hash_map.remove(3); System.out.println('Hashmap after removal:'); System.out.println(' KEY VALUE'); Set iter_set = hash_map.entrySet(); Iterator iterator = iter_set.iterator(); while(iterator.hasNext()) { Map.Entry mentry = (Map.Entry)iterator.next(); System.out.println(' '+mentry.getKey() + ' ' + mentry.getValue() ); } } }
Izlaz:
Sadržaj HashMap-a:
KLJUČNA VRIJEDNOST
49 Lily
2 Sevilla
3 Dillon
7 Čipkasto
12 Lav
Vrijednost u indeksu 2 je: Sevilla
Hashmap nakon uklanjanja:
KLJUČNA VRIJEDNOST
49 Lily
2 Sevilla
7 Čipkasto
12 Lav
Poredaj hash-kartu u Javi
U Javi HashMap ne čuva poredak. Stoga moramo sortirati elemente u HashMap-u. Elemente u HashMap-u možemo sortirati na temelju ključeva ili vrijednosti. U ovom ćemo odjeljku razgovarati o oba pristupa sortiranja.
Poredaj heš-mapu po tipkama
import java.util.*; public class Main { public static void main(String() args) { //create and initialize a HashMap HashMap colors_map = new HashMap(); colors_map.put(9, 'Magenta'); colors_map.put(11, 'Yellow'); colors_map.put(7, 'Cyan'); colors_map.put(23, 'Brown'); colors_map.put(5, 'Blue'); colors_map.put(3, 'Green'); colors_map.put(1, 'Red'); //print the unsorted HashMap by getting a set and using iterator System.out.println('Unsorted HashMap:'); Set set = colors_map.entrySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()) { Map.Entry me = (Map.Entry)iterator.next(); System.out.print(me.getKey() + ': '); System.out.println(me.getValue()); } //create a treemap from given HashMap so that the keys are sorted Map map = new TreeMap(colors_map); System.out.println('HashMap Sorted on keys:'); //print the sorted HashMap Set set2 = map.entrySet(); Iterator iterator2 = set2.iterator(); while(iterator2.hasNext()) { Map.Entry me2 = (Map.Entry)iterator2.next(); System.out.print(me2.getKey() + ': '); System.out.println(me2.getValue()); } } }
Izlaz:
Nerazvrstana HashMap:
1: Mreža
3: Zelena
5: Plava
7: Cijan
23: Smeđa
9: Magenta
11: Žuta
HashMap poredano po tipkama:
1: Mreža
3: Zelena
5: Plava
7: Cijan
9: Magenta
11: Žuta
23: Smeđa
U gore navedenom programu vidimo da nakon što se hashmapa definira i popuni vrijednostima, iz nje stvaramo mapu stabla. Kako se hashmapa pretvara u kartu stabla, njezini se ključevi automatski sortiraju. Dakle, kada prikazujemo ovu kartu stabla, na ključevima dobivamo razvrstanu kartu.
Poredaj heš-mapu prema vrijednostima
Za sortiranje HashMap-a prema vrijednostima prvo pretvaramo hashmapu u LinkedList. Zatim za sortiranje popisa koristimo metodu Collections.sort zajedno s usporednikom. Popis se zatim pretvara natrag u HashMap. Zatim se ispisuje sortirana HashMap.
import java.util.*; public class Main { public static void main(String() args) { //Create and initialize the HashMap HashMap colors_map = new HashMap(); colors_map.put(5, 'B'); colors_map.put(11, 'O'); colors_map.put(3, 'I'); colors_map.put(13, 'R'); colors_map.put(7, 'G'); colors_map.put(1, 'V'); colors_map.put(9, 'Y'); //print the HashMap using iterator after converting to set System.out.println('Unsorted HashMap:'); Set set = colors_map.entrySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()) { Map.Entry map_entry = (Map.Entry)iterator.next(); System.out.print(map_entry.getKey() + ': '); System.out.println(map_entry.getValue()); } //call sortByValues method that returns a sorted Map. Map c_map = sortByValues(colors_map); System.out.println('HashMap sorted on values:'); //print the sorted HashMap Set set2 = c_map.entrySet(); Iterator iterator2 = set2.iterator(); while(iterator2.hasNext()) { Map.Entry map_entry2 = (Map.Entry)iterator2.next(); System.out.print(map_entry2.getKey() + ': '); System.out.println(map_entry2.getValue()); } } private static HashMap sortByValues(HashMap hash_map) { //create a LinkedList from HashMap List list = new LinkedList(hash_map.entrySet()); // use Collections.sort method with Comparator to sort the list Collections.sort(list, new Comparator() { public int compare(Object o1, Object o2) { return ((Comparable) ((Map.Entry) (o1)).getValue()) .compareTo(((Map.Entry) (o2)).getValue()); } }); //create a HashMap from linkedlist which preserves the order HashMap sortedHashMap = new LinkedHashMap(); for (Iterator it = list.iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); sortedHashMap.put(entry.getKey(), entry.getValue()); } return sortedHashMap; } }
Izlaz:
Nerazvrstana HashMap:
1: V
3: I
5: B
7: G
9: i
11: O.
13: R
HashMap sortiran po vrijednostima:
5: B
7: G
3: I
11: O.
13: R
1: V
9: i
Istodobna heš-karta u Javi
U normalnoj HashMap-u nećemo moći mijenjati elemente tijekom izvođenja ili dok se izvodi iteracija.
Implementacija istodobne mape prikazana je u nastavku:
import java.util.*; import java.util.concurrent.ConcurrentHashMap; public class Main { public static void main(String() args) { //declare and initialize ConcurrentHashMap Map cCMap = new ConcurrentHashMap(); cCMap.put('1', '10'); cCMap.put('2', '10'); cCMap.put('3', '10'); cCMap.put('4', '10'); cCMap.put('5', '10'); cCMap.put('6', '10'); //print the initial ConcurrentHashMap System.out.println('Initial ConcurrentHashMap: '+cCMap); //define the iterator over the keys of ConcurrentHashMap Iterator it = cCMap.keySet().iterator(); //change one of the keys using iterator while(it.hasNext()){ String key = it.next(); if(key.equals('3')) cCMap.put(key+'c_map', 'c_map'); } //print the changed ConcurrentHashMap System.out.println('
ConcurrentHashMap after iterator: '+cCMap); } }
Izlaz:
Početna ConcurrentHashMap: {1 = 10, 2 = 10, 3 = 10, 4 = 10, 5 = 10, 6 = 10}
ConcurrentHashMap nakon iteratora: {1 = 10, 2 = 10, 3 = 10, 4 = 10, 5 = 10, 6 = 10, 3c_map = c_map}
Imajte na umu da bi, da smo izveli istu operaciju s HashMapom, tada bacio ConcurrentModificationException.
Java karta vs HashMap
Let's tablarizirati neke razlike između Map i HashMap u Javi.
Karta | HashMap |
---|---|
To je apstraktno sučelje. | Je li implementacija sučelja Map. |
Sučelje trebaju implementirati druge klase da bi njegova funkcionalnost bila dostupna. | Je li konkretna klasa i objekti klase se mogu stvoriti da bi se dobila funkcionalnost. |
Implementacija sučelja karte poput TreeMap ne dopušta null vrijednosti. | Omogućuje null vrijednosti i ključeve. |
TreeMap ne dopušta dvostruke vrijednosti. | Može imati dvostruke vrijednosti. |
Održava se prirodni poredak predmeta. | U HashMap-u se ne održava redoslijed unosa. |
Često postavljana pitanja
P # 1) Zašto se HashMap koristi u Javi?
Odgovor: HashMap kao zbirka parova ključ / vrijednost pomaže u pretraživanju podataka na temelju samo ključa. Također, jer koristi tehnike raspršivanja, omogućuje učinkovito pretraživanje podataka.
P # 2)Kako se izrađuje hash karta?
Odgovor: HashMap se može stvoriti instanciranjem klase 'HashMap' paketa java.util. HešMap s ključevima cijelog broja tipa i vrijednostima niza tipa može se stvoriti kako slijedi:
HashMap myMap= new HashMap();
3. pitanje)Je li HashMap naručen na Javi?
Odgovor: Ne, HashMap nije naručen na Javi. U tu se svrhu ne koristi u Javi, već se koristi za spremanje elemenata u parove ključ / vrijednost.
P # 4)Je li HashMap siguran u nitima?
Odgovor: NE, hashMap nije zaštićen niti u Javi.
što je ispitivanje automatizacije u testiranju softvera
5. pitanje)Što je brži HashMap ili ConcurrentHashMap?
Odgovor: HashMap je brži od ConcurrentHashMap. Razlog je taj što HashMap obično radi samo na jednoj niti, stoga su njegove performanse dobre. Istovremena HashMap, međutim, kao što i samo ime govori, istodobna je i može istovremeno raditi na više niti.
Zaključak
U ovom uputstvu razumjeli smo rad HashMap-a zajedno s drugom varijacijom HashMap-a koja se naziva ConcurrentHashMap. Vidjeli smo konstruktore, metode i primjere HashMap-a. Također smo razgovarali o ConcurrentHashMap zajedno s njegovim primjerom.
U našim predstojećim vodičima saznat ćemo više o Java Zbirkama.
=> Ovdje pogledajte kako biste ovdje vidjeli A-Z Java tutorijala za obuku.
Preporučena literatura
- LinkedHashMap u Javi - Primjer i implementacija LinkedHashMap
- JAVA Tutorial za početnike: 100+ praktičnih Java Video tutorijala
- TreeMap u Javi - Vodič uz primjere Java TreeMap
- Što je Java Vector | Vodič za Java Vector Class s primjerima
- Java String sadrži () Vodič za metode s primjerima
- Kako sortirati niz u Javi - Vodič sa primjerima
- Nazubljeni niz u Javi - Vodič s primjerima
- Vodič za razred Java Scannera s primjerima