Diferențele dintre HashMap și HashTable în Java
Publicat: 2021-06-02Dacă înveți despre Java și aplicațiile sale, trebuie să fi întâlnit HashMap și HashTable. Ambele sunt printre cele mai importante clase din cadrul Java Collection. Le veți folosi pe scară largă în timp ce dezvoltați cu Java, motiv pentru care este vital să înțelegeți diferențele dintre ele.
În următoarele puncte, vom acoperi subiectul HashTable vs HashMap în detaliu și vom explica diferențele dintre cele două:
Cuprins
Ce este HashMap?
HashMap a fost în colecția Java de la introducerea Java 1.2. Vă permite să efectuați implementări de bază ale interfeței Map din Java. HashMap stochează datele în perechi (Cheie, Valoare) și pentru a le accesa, va trebui să utilizați un index de alt tip, cum ar fi un număr întreg.
Aici, utilizați un obiect ca cheie (index) pentru un alt obiect (valoare), de unde folosiți perechea (cheie, valoare). Dacă adăugați o cheie duplicată, aceasta va înlocui elementul cheii corespunzătoare.
Caracteristicile HashMap
Pentru a înțelege diferențele dintre HashTable și HashMap, mai întâi, trebuie să înțelegeți caracteristicile acestora. Te-ar familiariza cu elementele de bază ale ambelor. HashMap are următoarele caracteristici:
- Face parte din pachetul java.util.
- Extinde o clasă abstractă AbstractMap care oferă o implementare incompletă a interfeței Map.
- Împreună cu implementarea interfeței Map, implementează și interfețele serializabile și clonabile.
- Permite valori duplicate, dar nu permite chei duplicate. Aceasta înseamnă că o cheie nu poate avea mai mult de o valoare, dar mai multe chei pot avea o singură valoare.
- Puteți utiliza cheia nulă o singură dată într-un HashMap, dar puteți utiliza mai multe valori nule.
- Nu oferă nicio garanție cu privire la ordinea hărții, în special dacă ordinea va rămâne constantă în timp. HashMap este aproape similar cu HashTable, dar este nesincronizat.
- HashSet folosește HashMap intern.
Ce este HashTable?
Utilizați clasa HashTable pentru a implementa un tabel hash care mapează cheile la valori. Aici, puteți utiliza obiecte non-nule ca cheie sau ca valoare. Rețineți că pentru a stoca și a prelua cu succes obiecte dintr-un tabel hash, obiectele pe care le-ați folosit ca chei trebuie să implementeze metoda hashCode și metoda equals.
O tabelă hash stochează datele într-un format de matrice și fiecare valoare de date are o valoare de index unică. Acest lucru vă permite să accesați anumite date destul de rapid dacă cunoașteți indexul necesar.
Caracteristicile HashTable
HashTable are caracteristicile sale specifice, la fel ca HashMap. Cu toate acestea, aceste caracteristici îl fac unic și diferit de HashMap în multe privințe:
- HashTable este destul de similar cu HashMap, dar este sincronizat.
- Stochează perechi cheie-valoare într-un tabel hash.
- Aici, specificați un obiect folosit ca cheie și valoarea pe care doriți să o asociați acestuia. Apoi indexați cheia și utilizați codul hash generat ca index în care stocați valoarea în tabel.
- Capacitatea implicită a clasei Hashtable este 11, iar factorul de încărcare este 0,75.
- HashMap nu oferă enumerare, în timp ce Hashtable nu oferă o enumerare rapidă.
Diferențele dintre HashMap și HashTable
Acum că cunoașteți punctele importante ale HashMap și HashTable, le vom compara acum și vom vedea diferențele proeminente dintre cele două:
HashMap | HashTable |
Este nesincronizat. Nu puteți partaja multe fire aici fără a utiliza codul de sincronizare adecvat, deoarece nu este sigur pentru fire. | Este sincronizat. Îl puteți partaja cu multe fire de discuții, deoarece este sigur pentru fire. |
Moștenește clasa AbstractMap. | Moștenește clasa Dicționar. |
Aici, Iteratorul este rapid în cădere. | În HashTable, Enumeratorul nu este rapid. |
Iteratorul traversează HashMap. | Enumeratorul și Iteratorul traversează HashTable. |
Puteți face un HashMap sincronizat apelând codul Harta m = Collections.synchronisedMap(hashMap); | Tabelele Hash sunt sincronizate intern și nu le puteți desincroniza cu niciun cod. |
Este destul de rapid. | Este relativ mai lent decât HashMap. |
HashMap este o clasă nouă și a fost introdusă recent în JDK 1.2. | HashTable este o clasă moștenită. |
Permite mai multe valori nule și o cheie nulă. | Nu permite nicio valoare sau cheie nulă. |
Exemplu de codare
Urmează un exemplu de HashMap și HashTable la locul de muncă, astfel încât să puteți înțelege diferențele dintre HashMap și HashTable.
Intrare:
import java.util.*;
import java.lang.*;
import java.io.*;
JavaTester de clasă publică{
public static void main(Argumente șir[]){
Hashtable ht=new Hashtable();
ht.put(1,”Uday”);
ht.put(1,”Ujjwal”);
ht.put(2,”Sumit”);
ht.put(3,”Vijay”);
System.out.println(“————-Tabel Hash————–“);
Set<Integer> keySet = ht.keySet();
pentru (Integer key:keySet) {
System.out.println(key + ” „+ht.get(key));
}
HashMap hm=new HashMap();
hm.put(0,”Uday”);
hm.put(4,”Uday”); // puteți avea valori duplicate într-o hartă hash
hm.put(1,”Sumit”);
hm.put(2,”Vijay”);
System.out.println(“———–Hartă hash———–“);
Set<Integer> keySet1 = ht.keySet();
pentru (Integer key:keySet) {
System.out.println(cheie + ” “+hm.get(cheie));
}
}
}
Ieșire:
Tabel hash:
3 Vijay
2 Sumit
1 Ujjwal
Harta hash:
0 Uday
1 Summit
2 Vijay
4 Uday
Când să utilizați HashMap vs HashTable?
Factorul principal care determină dacă veți folosi HashMap sau HashTable este sincronizarea. Dacă aveți nevoie de o sarcină sigură pentru fire, atunci ar trebui să utilizați HashTable, deoarece toate metodele sale sunt sincronizate. Cu toate acestea, este o clasă moștenită și ar trebui să le evitați.
Dacă aveți un mediu cu mai multe fire, ar trebui să utilizați ConcurrentHashMap, deoarece este destul de similar cu HashTable. Vă permite să sincronizați HashMap corect.
Operațiunile sincronizate provoacă performanțe slabe, așa că ar trebui să le evitați în majoritatea cazurilor. Mai mult, HashMap este potrivit pentru un mediu fără fire, așa că îl puteți utiliza cu ușurință.
Învață cursuri de software online de la cele mai bune universități din lume. Câștigă programe Executive PG, programe avansate de certificat sau programe de master pentru a-ți accelera cariera.
Concluzie
HashMap și HashTable sunt coduri Java populare cu funcții similare. Cu toate acestea, după cum puteți vedea, există câteva diferențe proeminente între cele două. HashMap este o clasă Java, în timp ce HashTable este o structură de date.
Dacă sunteți interesat să aflați mai multe despre Java și alte limbaje de programare, vă recomandăm să consultați Programul nostru Executive PG în Dezvoltare software cu specializare în Dezvoltare Full Stack .
Ce este un tabel hash?
Tabelul hash este o structură de date container care este utilizată pe scară largă în programarea computerelor. Tabelele hash sunt folosite pentru a deține perechi cheie-valoare, unde cheia poate fi orice obiect. Ca container, un tabel hash ar trebui să sprijine operațiunile de inserare și îndepărtare. Ca instrument de căutare, un tabel hash ar trebui să sprijine operația get. Dacă o tabelă hash ar trebui să fie o structură de date de dicționar, ar trebui să accepte și operarea conține. Deci, în general, un tabel hash este o structură de date care este utilizată pe scară largă pentru a implementa eficient operațiunile de inserare, eliminare, obținere și conținut. Tabelul de hash este utilizat pe scară largă datorită performanței sale rapide.
Ce este cadrul de colecții în Java?
Java Collections Framework este un set de interfețe, clase și algoritmi pentru platforma Java. A făcut parte din platforma Java începând cu versiunea 1.2. Include interfețe pentru containere, liste, cozi și așa mai departe, dar include și clase pentru a gestiona date și ore, o clasă pentru a gestiona expresiile regulate, alta pentru a gestiona internaționalizarea și încă o alta pentru a gestiona căutarea prin fișiere.
Care este relația dintre un hashtable și hashmap în Java?
Un hashtable este o structură specială de date care asociază cheile cu valori. Cheile pot fi orice obiect, dar toate cheile dintr-o tabelă hash trebuie să fie comparabile între ele (adică să folosească interfețe identice sau compatibile). În Java, o hartă este un tip specific de hashtable care este implementat folosind un TreeMap. Cheile dintr-o hartă trebuie să implementeze o metodă egală, iar harta utilizează această metodă pentru a determina dacă două chei sunt egale sau nu. Aceasta înseamnă că doar cheile sunt stocate pe hartă, iar valoarea lor asociată este calculată ori de câte ori este nevoie.