Atšķirība starp HashMap un Hashtable Java

Autors: Laura McKinney
Radīšanas Datums: 2 Aprīlis 2021
Atjaunināšanas Datums: 5 Maijs 2024
Anonim
Рефакторинг: switch vs if-else vs enum vs HashMap [Шаблон "Команда"]
Video: Рефакторинг: switch vs if-else vs enum vs HashMap [Шаблон "Команда"]

Saturs


HashMap un Hashtable, abi tiek izmantoti, lai attēlotu objektu grupa kas ir pārstāvēti pāri. Katrs pāris tiek saukts Iebraukšana objekts. kolekcija Ierakstu skaitu norāda objekts HashMap un Hashtable. Kolekcijas taustiņiem jābūt unikāliem vai atšķirīgiem. Atšķirība starp HashMap un Hashtable ir tāda HashMap īpaši īsteno kartes saskarni, turpretī Jauki paplašina vārdnīcu klasi (mantoto klasi), kas tiek pārveidota, lai ieviestu kartes saskarni. Otra būtiska atšķirība ir tā, ka HashMap objekti ir nesinhronizēts tā kā Hashtable objekti ir sinhronizēts.

Apskatīsim zemāk parādīto salīdzināšanas tabulu, lai uzzinātu vēl dažas atšķirības starp HashMap un Hashtable.

  1. Salīdzināšanas tabula
  2. Definīcija
  3. Galvenās atšķirības
  4. Līdzības
  5. Secinājums

Salīdzināšanas tabula

Salīdzināšanas pamatsHashMapJauki
Ieviest / pagarinātHashMap klase ievieš kartes saskarni un paplašina AbstractMap klasi.Hashtable paplašina vārdnīcas mantojuma klasi, taču tā ir pārveidota, un tagad tā arī ievieš kartes saskarni.
SinhronizācijaHashMap nav sinhronizēts, un līdz ar to HashMap objekts nav droši vītņots.Hashtable tiek sinhronizēts, un tādējādi Hashtable objekts ir drošs ar pavedieniem.
Taustiņi / vērtībaTaustiņš var atgriezt nulli tikai vienu reizi, bet vērtība var atgriezt nulli tik daudz laika.Atslēga nevar atgriezt nulli, jo tā tiek izmantota, lai iegūtu hash kodu, kas tiks izmantots kā hash tabulas indekss, un vērtība nevar atgriezt nulli.
Sākotnējā noklusējuma jaudaSākotnējā HashMap sākotnējā ietilpība ir 16.Sākotnējā Hashtable sākotnējā ietilpība ir 11.
ŠķērsoHashMap šķērso Iterator.Tāpat kā Map klase Hashtable arī tieši neatbalsta Iterator pārvietošanos, tāpēc izmanto Enumerator.


HashMap definīcija

HashMap ir klase, kas ievieš Karte interfeisu un paplašina AbstractMap klase izmanto hash tabulu. HashMap objekts attiecas uz kolekciju / komplektu pāri, kur katra atslēga tiek kartēta uz noteiktu vērtību. Kolekcijas taustiņiem jābūt unikāliem, jo ​​tos izmanto vērtības iegūšanai. No otras puses, kolekcijā esošās vērtības var dublēt. HashMap klases un HashMapclass konstruktoru deklarācija ir šāda:

/ * K apzīmē taustiņu, un V apzīmē vērtību * / klase HashMap / * HashMap klases konstruktori * / HashMap () HashMap (Karte <? Pagarina K,? Pagarina V> m) HashMap (int kapacitāte) HashMap (int kapacitāte, float fillRatio)

Pirmais konstruktors ir noklusējuma konstruktors, kurš inicializē tukšu HashMap objektu ar noklusējuma jaudu 16 un noklusējuma aizpildījuma attiecību 0,75. Otrais konstruktors inicializē jaucējkarti ar vērtību m. Trešais konstruktors izveido jaucējkarti ar sākotnējo jaudu, kas atbilst vērtībā, kas norādīta argumentā “kapacitāte”. Ceturtais konstruktors inicializē hash karti ar parametros norādīto ietilpību un piepildījuma attiecību. ļaujiet mums tagad uzzināt, kā ievadīt ierakstus hash kartē.


Hashmap hm = jauna Hashmap (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Jordānija", 200); System.out.ln (hm); / * izeja * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordan = 200}

Iepriekš redzamajā kodā var redzēt, ka esmu izveidojis tukšu HashMap objektu hm ar noklusējuma sākotnējo ietilpību un noklusējuma aizpildījuma attiecību. Pēc tam es ievietoju četrus ierakstus hash kartē, izmantojot metodi put (K, V), kas norāda atslēgu uz vērtību. Varat novērot, ka ieraksti netiek rediģēti secībā, kurā tos pabarojat, jo ievietošanas secība nav fiksēta. Tagad apsveriet gadījumu, kurā jums jau ir ieraksts hash kartē un pēc tam jūs mēģināt ievietot put (K1, V5), ti, jūs mēģināt kartēt to pašu taustiņu ar atšķirīgu vērtību. Tad pārdošanas metode aizstās veco vērtību V1 ar jauno vērtību V2 un atgriezīs veco vērtību V1, pretējā gadījumā, ja mēs nekad nemēģinām aizstāt atslēgas vērtību, tad ievietošanas metode šai atslēgai atgriež nulli.

Hashtable definīcija

Hashtable ir klase, kas paplašina Vārdnīca klase, kas ir mantota klase un ir pārveidota, lai ieviestu Karte saskarne. The Hashtable kā datu struktūru izmanto hash tabulu. Hashtable ir līdzīgs HashMap, jo šeit arī Hashtable objekts attiecas uz ierakstu kolekciju, kur katrs ieraksts ir pāris . No otras puses, visiem kolekcijas taustiņiem jābūt unikāliem, vērtības var dublēt. Taustiņus īpaši izmanto, lai iegūtu hash koda vērtību, kas nosaka indeksu, kur pāris tiks saglabāts hash tabulā. Jaukšanas tabulā ne atslēga, ne vērtība nevar atgriezt nulles rādītāju. Ļaujiet mums redzēt Hashtable klases deklarāciju un hashtable klases konstruktorus.

/ * K norāda atslēgu un V norāda vērtību, kas saistīta ar atslēgu * / class Hashtable / * Hashtable * / Hashtable () Hashtable (int izmērs) Hashtable (int lielums, float fillRatio) Hashtable (Karte <? pagarina K,? pagarina V> m)

Iepriekš minētajā kodā pirmais konstruktors ir noklusējuma konstruktors, kas rada tukšu objektu klasē Hashtable, tā noklusējuma lielums ir 11 un noklusējuma aizpildīšanas koeficients ir 0,75. Otrais konstruktors izveido hash tabulu ar izmēru, kas atbilst parametrā “size” norādītajai vērtībai. Trešais konstruktors izveido hash tabulu ar parametrā norādīto izmēru un aizpildījuma attiecību. Ceturtais konstruktors inicializē hash tabulu ar vērtību m. Tagad iemācīsimies, kā ievietot pāris hash tabulā.

Hashtable ht = jauns Hashtable (); ht.put (jauns hashCode (2), 275); ht.put (jauns hashCode (12), 250); ht.put (jauns hashCode (16), 150); ht.put (jauns hashCode (8), 200); System.out.ln (ht); / * izeja * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

Iepriekš minētajā kodā es izveidoju tukšu Hashtable objektu un ievietoju četrus ierakstus, izmantojot metodi put (). Iekšējās pārdošanas metodē es saucu hashCode (), kas aprēķina un atdod hash koda vērtību, kas darbosies kā ieejas objekta indeksa vērtība. Kā redzat, es neminēju hash tabulas lielumu, tāpēc pēc noklusējuma tā būs 11. Šeit arī netiek saglabāta ievietošanas kārtība un līdz ar to, ja ed ieraksti neparādījās secīgi, tā tika padota.

  1. HashMap īsteno Karte saskarne un paplašina abstraktu klasi, AbstractMap tā kā Hashtable paplašina abstrakto klasi Vārdnīca, kas ir arī Legacy klase, kuru vēlāk pārveidoja, lai ieviestu Karte saskarne.
  2. Objekts HashMap ir nesinhronizēts t.i., vairāki pavedieni tajā var darboties vienlaicīgi, un tādējādi tas ir objekts, kas nav drošs pavedieniem. No otras puses, Hashtable objekti ir sinhronizēts t.i., ja pavediens vēlas darboties ar Hashtable objektu, tam ir jāiegūst šī objekta bloķēšana, lai neviens cits pavediens nevarētu piekļūt šim objektam, un tādējādi tas ir drošs ar diegu.
  3. In HashMap taustiņš var atgriezties Nulle tikai vienu reizi, un vērtība var atgriezties Nulle vairākas reizes. No otras puses, atslēga nekad nevar atgriezt nulli, jo to izmantoja hash koda vērtības iegūšanai, kas tiek izmantota kā indekss pāris un neviena vērtība nevar atgriezt nulli.
  4. Jaukšanas tabulas noklusējuma ietilpība HashMap klasē ir 16 tā kā hashble tabulas noklusējuma ietilpība failā Hashtable ir 11.
  5. Iterators var šķērsot Hashmap ierakstus. No otras puses, Hashtable tieši neatbalsta atkārtotāju, tātad kopumā Skaitītājs tiek izmantots ierakstu caurskatīšanai Hashtable.

Līdzības:

  • Gan HashMap, gan Hashtable izmanto datu struktūras hash tabula.
  • Gan HashMap, gan Hashtable Karte saskarne
  • Ievietošanas secība netiek saglabāta gan HashMap, gan Hashtable un balstās uz hash kodu, kas iegūts, izmantojot atslēgas.
  • Vietnēs HashMap un Hashtable taustiņiem jābūt unikāls tā kā vērtības var būt dublēts.
  • Gan HashMap, gan Hashtable var saturēt neviendabīgi objekti gan taustiņiem, gan vērtībām.
  • Gan HashMap, gan Hashtable, abi darbarīki Serializējams un Klonējams saskarnes, bet nē, izlases pieeja.
  • Gan HashMap, gan Hashtable ir noklusējuma aizpildīšanas koeficients 0.75.
  • HashMap un Hashtable abi ir vislabākie izguvei vai meklēšana operācijas.

Secinājums:

HashMap veiktspēja ir labāka, jo tā objekti nav sinhronizēti un vairāki pavedieni tajā var darboties vienlaikus, un tādējādi tas ir ātrāks nekā Hashtable.