what is hashmap java
Acest tutorial Java HashMap explică ce este un HashMap în Java și cum se folosește. Acesta include Cum să declare, să inițializeze, să itereze, să implementeze și să imprime HashMap:
HashMap în Java este o colecție bazată pe hartă și constă din perechi cheie-valoare. Un HashMap este notat cu sau. Un element HashMap poate fi accesat folosind o cheie, adică trebuie să știm cheia pentru a accesa elementul HashMap.
Un HashMap folosește o tehnică numită „Hashing”. În hash, un șir mai lung este convertit într-un șir mai scurt prin aplicarea unor algoritmi sau „funcție hash”. Un șir este convertit într-un șir mai scurt, deoarece ajută la căutarea care este mai rapidă. Este, de asemenea, utilizat pentru indexarea eficientă.
=> Vizitați aici pentru seria exclusivă de instruiri Java.
Ce veți învăța:
- HashMap În Java
- Java Map Vs HashMap
- Concluzie
HashMap În Java
Un HashMap este similar cu HashTable cu o diferență că HashMap nu este sincronizat și permite valori nule pentru cheie și valoare.
Unele dintre caracteristicile importante ale HashMap sunt prezentate mai jos:
- HashMap este implementat în Java în clasa „Hashmap” care face parte din pachetul java.util.
- Clasa HashMap moștenește din clasa „AbstractMap” care implementează parțial interfața Map.
- HashMap implementează, de asemenea, interfețe „clonabile” și „serializabile”.
- HashMap permite duplicarea valorilor, dar nu permite cheile duplicate. HashMap permite, de asemenea, mai multe valori nule, dar o cheie nulă poate fi doar una.
- HashMap nu este sincronizat și, de asemenea, nu garantează ordinea elementelor.
- Clasa Java HashMap are o capacitate inițială de 16 și factorul de încărcare implicit (inițial) este 0,75.
Cum să declare un HashMap în Java?
Un HashMap în Java face parte din pachetul java.util. Prin urmare, dacă trebuie să folosim HashMap în codul nostru, trebuie mai întâi să importăm clasa de implementare folosind una dintre următoarele afirmații:
import java.util.*;
SAU
import java.util.HashMap;
Declarația generală a clasei HashMap este:
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable
Aici, K => tipul de chei prezente pe hartă
V => tipul valorilor mapate la tastele din hartă
Creați un HashMap
Un HashMap în Java poate fi creat după cum urmează:
import java.util.HashMap; HashMap cities_map = new HashMap ();
Declarația de mai sus include mai întâi clasa HashMap în Java. Apoi, în următoarea declarație, creăm un HashMap numit „Cities_map” cu tipul de cheie ca întreg și Valori ca șir.
Odată creat HashMap, trebuie să-l inițializăm cu valori.
Cum se inițializează Hash Map?
Putem inițializa HashMap folosind metoda put prin introducerea unor valori în hartă.
Programul de mai jos arată inițializarea HashMap în Java.
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()); } } }
Ieșire:
Harta inițială: {}
După adăugarea de elemente:
100 Rețea
101 Verde
102 Albastru
Cum funcționează intern un HashMap?
Știm că HashMap este o colecție de perechi cheie-valoare și folosește o tehnică numită „Hashing”. Pe plan intern, HashMap este o serie de noduri. HashMap folosește matrice și LinkedList pentru stocarea perechilor cheie-valoare.
Dat mai jos este o structură a unui nod al HashMap care este reprezentat programatic ca o clasă.
După cum se vede din reprezentarea nodului de mai sus, un nod are o structură similară cu un nod de listă legată. O matrice a acestor noduri se numește Bucket. Este posibil ca fiecare cupă să nu aibă aceeași capacitate și poate avea mai mult de un nod.
Performanța HashMap este influențată de doi parametri:
(i) Capacitate inițială: Capacitatea este definită ca numărul de găleți din HashMap. Capacitatea inițială este definită ca fiind capacitatea obiectului HashMap atunci când este creat. Capacitatea HashMap este întotdeauna înmulțită cu 2.
(ii) LoadFactor: LoadFactor este parametrul care măsoară atunci când se reapărește - se va face creșterea capacității.
Rețineți că, dacă capacitatea este ridicată, factorul de încărcare va fi mic, deoarece nu va fi necesară reaprinderea. În mod similar, atunci când capacitatea este scăzută, factorul de încărcare va fi mare, deoarece va trebui să refacem frecvent. Astfel, ar trebui să avem grijă să alegem cu atenție acești doi factori pentru a proiecta un hashMap eficient.
Cum să iterez o HashMap?
HashMap trebuie parcurs pentru a manipula sau imprima perechile cheie-valoare.
Există două moduri în care putem parcurge sau itera prin HashMap.
- Folosind bucla
- Folosind bucla while și iteratorul.
Programul Java de mai jos prezintă implementarea ambelor metode.
Mai întâi, preluăm setul de intrări din HashMap folosind metoda entrySet și apoi traversăm setul folosind bucla for. Apoi imprimăm perechile cheie-valoare folosind metodele getKey () și respectiv getValue ().
Pentru a parcurge HashMap folosind o buclă while, mai întâi setăm un iterator pentru HashMap și apoi accesăm perechile cheie-valoare folosind iteratorul.
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()); } } }
Ieșire:
HashMap folosind pentru Loop:
VALOARE CHEIE
1 DL
3 LUNG
20 PUN
7 GOA
10 MUM
HashMap folosind while Loop:
VALOARE CHEIE
1 DL
3 LUNG
20 PUN
7 GOA
10 MUM
Imprimați o hartă Hash
Să vedem un alt exemplu de imprimare a hashMap utilizând bucla foreach prezentată în programul de mai jos.
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)); } } }
Ieșire:
Conținut HashMap:
VALOARE CHEIE
Rețeaua 1
Magenta 8
Portocaliu 5
HashMap Constructor / Metode în Java
Tabelele de mai jos prezintă constructorii și metodele furnizate de clasa HashMap în Java.
Constructori
Prototipul constructorului | Descriere | |
---|---|---|
pune tot | void putAll (hartă hartă) | Inserează elemente „hartă” specificate în HashMap. |
HashMap () | Constructor implicit. | |
HashMap (Harta m) | Creează un nou HashMap din obiectul hartă dat m. | |
HashMap (capacitate int) | Creează un nou HashMap cu capacitatea inițială dată de argumentul „capacitate”. | |
HashMap (capacitate int, float loadFactor) | Creează un nou HashMap folosind valorile de capacitate și loadFactor furnizate de constructor. |
Metode
Metodă | Metoda prototip | Descriere |
---|---|---|
clar | gol clar () | Șterge toate mapările din HashMap |
este gol | boolean isEmpty () | Verifică dacă HashMap este gol. Returnează adevărat dacă da. |
clona | Clonare obiect () | Returnează o copie superficială fără a clona tastele și mapările valorilor din HashMap. |
entrySet | Set entrySet () | Returnează mapări în HashMap ca colecție |
set de chei | Set keySet () | Returnează un set de taste din HashMap. |
a pune | V put (cheie obiect, valoare obiect) | Inserează o intrare valoare-cheie în HashMap. |
putIfAbsent | V putIfAbsent (cheie K, valoare V) | Inserează perechea cheie-valoare dată în HashMap dacă nu este deja prezentă. |
elimina | V remove (cheie obiect) | Ștergeți o intrare din HashMap pentru cheia dată. |
elimina | eliminare booleană (cheie obiect, valoare obiect) | Șterge perechea cheie-valoare dată din HashMap. |
calcula | Calcul V (cheie K, funcție de remapare BiFunction) | Calculează maparea utilizând „remappingfunction” pentru cheia dată și valoarea sa curentă sau valoarea nulă. |
Metodă | Metoda prototip | Descriere |
computeIfAbsent | V computeIfAbsent (tasta K, funcția mapare funcție) | Calculează maparea utilizând „mappingFunction” și inserează perechi cheie-valoare dacă nu este deja prezentă sau este nulă. |
computeIfPresent | V computeIfPresent (tasta K, funcția de remapare BiFunction) | Calculează o nouă mapare utilizând „remappingFunction” dată cheii dacă cheia este deja prezentă și este nulă. |
conține Valoare | boolean conține Valoare (valoarea obiectului) | Verifică dacă valoarea dată există în HashMap și returnează true dacă da. |
conține Cheie | boolean conține Key (cheie obiect) | Verifică dacă cheia dată este prezentă în HashMap și returnează adevărat dacă da. |
este egal | boolean este egal (Obiectul o) | Compară obiectul dat cu HashMap. |
pentru fiecare | nul pentru fiecare (acțiune BiConsumer) | Execută „acțiune” dată pentru fiecare dintre intrările din HashMap. |
obține | V get (cheia obiectului) | Returnează obiectul care conține cheia dată cu valoarea asociată. |
getOrDefault | V getOrDefault (cheie obiect, V defaultValue) | Returnează valoarea la care este mapată cheia dată. Dacă nu este mapat, returnează valoarea implicită. |
este gol | boolean isEmpty () | Verifică dacă HashMap este gol. |
merge | V merge (tasta K, valoarea V, funcția de remapare BiFunction) | Verifică dacă cheia dată este nulă sau nu este asociată cu valoare și apoi o asociază cu o valoare non-nulă folosind remappingFunction. |
a inlocui | Înlocuire V (tasta K, valoare V) | Înlocuiește valoarea dată pentru cheia specificată. |
a inlocui | înlocuire booleană (tasta K, V oldValue, V newValue) | Înlocuiește vechea valoare a cheii date cu noua valoare |
înlocuiește-le pe toate | void replaceAll (funcția BiFunction) | Execută funcția dată și înlocuiește toate valorile din HashMap cu rezultatul funcției. |
valori | Valorile colecției () | Returnează colecția de valori prezente în HashMap. |
mărimea | int size () | Returnează dimensiunea numărului de intrări în HashMap. |
Implementarea Hashmap
Apoi, vom implementa majoritatea acestor funcții într-un program Java pentru a înțelege cum funcționează mai bine.
Următorul program Java arată o implementare a HashMap în Java. Rețineți că am folosit majoritatea metodelor pe care le-am discutat mai sus.
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() ); } } }
Ieșire:
Conținut HashMap:
VALOARE CHEIE
49 Lily
2 Sevilla
3 Dillon
7 Lacy
12 Leu
Valoarea la indicele 2 este: Sevilla
Hashmap după eliminare:
VALOARE CHEIE
49 Lily
2 Sevilla
7 Lacy
12 Leu
Sortează HashMap în Java
În Java, HashMap nu păstrează ordinea. Prin urmare, trebuie să sortăm elementele din HashMap. Putem sorta elementele din HashMap fie pe bază de chei, fie de valori. În această secțiune, vom discuta atât abordările de sortare.
Sortează HashMap după taste
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()); } } }
Ieșire:
HashMap nesortat:
1: Rețea
3: Verde
5: Albastru
7: Cyan
23: Maro
9: Magenta
11: Galben
HashMap Sortat pe taste:
1: Rețea
3: Verde
5: Albastru
7: Cyan
9: Magenta
11: Galben
23: Maro
În programul de mai sus, vedem că, odată ce hashmap-ul este definit și populat cu valori, creăm un treemap din acest hashmap. Pe măsură ce hashmap-ul este convertit într-un treemap, cheile sale sunt sortate automat. Astfel, atunci când afișăm această hartă, obținem harta sortată pe taste.
Sortează HashMap după valori
Pentru sortarea unui HashMap în funcție de valori, convertim mai întâi hashmap-ul într-o LinkedList. Apoi folosim metoda Collections.sort împreună cu comparatorul pentru a sorta lista. Această listă este apoi convertită înapoi la HashMap. HashMap-ul sortat este apoi tipărit.
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; } }
Ieșire:
HashMap nesortat:
1: V
3: Eu
5: B
7: G
9: și
11: O
13: R
HashMap sortat pe valori:
5: B
7: G
3: Eu
11: O
13: R
1: V
9: și
HashMap simultan în Java
În HashMap normal, nu vom putea modifica elementele în timpul rulării sau în timp ce se efectuează iterația.
cel mai bun instrument de gestionare a cazurilor de test pentru jira
Implementarea unei hărți simultane este prezentată mai jos:
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); } }
Ieșire:
Initial ConcurrentHashMap: {1 = 10, 2 = 10, 3 = 10, 4 = 10, 5 = 10, 6 = 10}
ConcurrentHashMap după iterator: {1 = 10, 2 = 10, 3 = 10, 4 = 10, 5 = 10, 6 = 10, 3c_map = c_map}
Rețineți că, dacă am fi efectuat aceeași operație cu HashMap, atunci ar fi aruncat ConcurrentModificationException.
Java Map Vs HashMap
Să tabelăm câteva dintre diferențele dintre Map și HashMap în Java.
Hartă | HashMap |
---|---|
Este o interfață abstractă. | Este o implementare a interfeței Map. |
Interfața trebuie să fie implementată de alte clase pentru ca funcționalitatea sa să fie disponibilă. | Este o clasă concretă și obiecte de clasă pot fi create pentru a obține funcționalitatea. |
Implementarea interfeței hărții, cum ar fi TreeMap, nu permite valori nule. | Permite valori și chei nule. |
TreeMap nu permite duplicarea valorilor. | Poate avea valori duplicat. |
Se menține o ordonare naturală a obiectelor. | Nicio ordine de intrare nu este menținută în HashMap. |
întrebări frecvente
Q # 1) De ce se folosește HashMap în Java?
Răspuns: HashMap fiind colecția de perechi cheie-valoare ajută la căutarea datelor numai pe bază de cheie. De asemenea, deoarece folosește tehnici de hash, oferă o căutare eficientă a datelor.
Q # 2)Cum creați o hartă hash?
Răspuns: Un HashMap poate fi creat prin instanțierea clasei „HashMap” a pachetului java.util. Un hashMap cu chei de tip întreg și valori ale șirului de tip poate fi creat după cum urmează:
HashMap myMap= new HashMap();
Q # 3)HashMap este comandat în Java?
Răspuns: Nu, HashMap nu este comandat în Java. Nu este utilizat în Java în acest scop, ci este utilizat pentru stocarea elementelor în perechi cheie-valoare.
Q # 4)HashMap este sigur pentru fire?
Răspuns: NU, hashMap nu este sigur în fire în Java.
Q # 5)Care este HashMap mai rapid sau ConcurrentHashMap?
Răspuns: HashMap este mai rapid decât ConcurrentHashMap. Motivul este că HashMap funcționează de obicei pe un singur fir, astfel performanța sa este bună. HashMap simultan, totuși, așa cum sugerează și numele, este simultan și poate funcționa simultan pe mai multe fire.
Concluzie
În acest tutorial, am înțeles funcționarea HashMap împreună cu o altă variantă a HashMap numită ConcurrentHashMap. Am văzut constructori, metode și exemple de HashMap. De asemenea, am discutat despre ConcurrentHashMap împreună cu exemplul său.
În tutorialele noastre viitoare, vom afla mai multe despre colecțiile Java.
=> Verificați aici pentru a vedea A-Z a tutorialelor de instruire Java aici.
Lectură recomandată
- LinkedHashMap în Java - Exemplu și implementare LinkedHashMap
- Tutorial JAVA pentru începători: peste 100 de cursuri video Java practice
- TreeMap în Java - Tutorial cu exemple de TreeMap Java
- Ce este Java Vector | Tutorial Java Vector Class cu exemple
- Șirul Java conține () Tutorial metodă cu exemple
- Cum să sortați o matrice în Java - Tutorial cu exemple
- Matrice Jagged în Java - Tutorial cu exemple
- Tutorial de clasă Java Scanner cu exemple