HashMap un LinkedHashMap ir divas no visizplatītākajām un vispārējās nozīmes karšu ieviešanām Java platformā. Tās pamatā ir hash klases, diezgan līdzīgas viena otrai un tiek izmantotas kartes izveidošanai. Kartes saskarne ir pēdējā no lielākajām kolekciju ietvara saskarnēm, kas nosaka darbības, kuras atbalsta atslēgu un vērtību apvienību kopums, kurā atslēgas ir unikālas. Šīs kartes ieviešanas pamatā ir sajaukšanas algoritms. Kamēr klase HashMap realizē nesakārtotas kartes, LinkedHashMap klase realizē pasūtītas kartes. Īstenošana LinkedHashMap ir HashMap klases apakšklase, kas nozīmē, ka tā manto klases HashMap iezīmes. Izpildījuma ziņā starp abiem nav daudz atšķirību. Apskatīsim

Kas ir HashMap?

HashMap ir viens no visizplatītākajiem un starp četriem Java kartes interfeisa vispārējas nozīmes lietojumiem, kuru pamatā ir hashinga algoritms. Tas ir analogs iestatītajai klasei HashSet, lai gan abās klasēs elementi nav sakārtoti. Tas tiek ieviests kā hash tabula, bet atšķirībā no LinkedHashMap tas neuztur nekādu taustiņu vai vērtību secību. Kopumā HashMap nodrošina pastāvīgu izpildes laiku pārdošanas un pārdošanas iespējām. Klase nav droša pavedieniem, taču tā pieļauj vienu nulles atslēgu un vairākas nulles vērtības. Tā kā tas neuztur atkārtojošu secību, tas prasa mazāk atmiņas.

Kas ir LinkedHashMap?

LinkedHashMap ir viena no četrām kartes saskarnes vispārējas nozīmes ieviešanai, kas ir HashMap klases apakšklase, kas nozīmē, ka tā manto tās funkcijas. Lai arī veiktspējas ziņā tas ir ļoti līdzīgs HashMap, izņemot taustiņu ievietošanas secības saglabāšanu vai nu secībā, kādā atslēgas tiek ievietotas kartē, vai secībā, kādā ierakstiem tiek piekļūts kartē. Tas precizē vecāku klases līgumu, garantējot kārtību, kādā iteratori atdod savus elementus. Tomēr tas prasa vairāk atmiņas nekā HashMap, jo tas Java uztur divkārši saistītu sarakstu.

Atšķirība starp HashMap un LinkedHashMap

  1. Pamatinformācija par HashMap Vs. LinkedHashMap

HashMap ir uz hash balstīta kartes saskarnes ieviešana Java. Kartes ir galveno vērtību pāru kolekcija, un tās tiek izmantotas, kad saraksti ir pasūtītā kolekcijā. HashMap ir kolekcijas klase, kurā tiek glabāta vērtība galveno vērtību pāros. Vienkārši izsakoties, tas nosaka atslēgas ar vērtībām, kas nozīmē, ka tā var atrast vērtību, pamatojoties uz atslēgu. LinkedHashMap ir saistīts saskarnes kartes interfeisa ieviešana tāpat kā HashMap, izņemot, ka tā uztur tajā ievietoto elementu pasūtījumus. Tā ir HashMap apakšklase, kas manto tās īpašības. LinkedHashMap uzlabo savas vecāku klases HashMap līgumu, garantējot secību, kādā iteratori atdod savus elementus.

  1. Atkārtošanas rīkojums

Galvenā atšķirība starp HashMap un LinkedHashMap ir kārtība. HashMap elementi nav kārtībā, pilnīgi nejauši, savukārt LinkedHashMap elementi ir pasūtīti. LinkedHashMap ieraksti ir atslēgu ievietošanas secībā, kas ir secība, kādā atslēgas tiek ievietotas kartē. Tas nozīmē, ka vispirms tiek uzskaitīts pirmais kartē ievietotais taustiņš, tāpat kā ar to saistītā vērtība, un pēdējais ievietots uzskaitītajā pēdējais. LinkedHashMap ir paredzama atkārtojuma secība, kas nozīmē, ka tā var arī uzturēt savus elementus piekļuves secībā, kas ir ierakstu piekļuves secība.

  1. Īstenošana

Gan HashMap, gan LinkedHashMap klases izmanto jaukšanu, lai ieviestu kartes saskarni Java, izņemot HashMap tiek ieviesta kā hash tabula, turpretī LinkedHashMap uztur divtik saistītu kausu sarakstu, kas darbojas caur visiem tā ierakstiem. Tāpēc LinkedHashMap prasa vairāk atmiņas nekā HashMap, jo atšķirībā no HashMap tā uztur pasūtījumu. Tas noņem haotisko HashMap pasūtījumu, neradot papildu izmaksas, kas citādi būtu radušās, izmantojot TreeMap. Bez tam LinkedHashMap klase daudzos aspektos, piemēram, sinhronizācijā un nulles taustiņos / vērtībās, ir ļoti līdzīga HashMap klasei, jo abi pieļauj vienu nulles atslēgu un vairākas nulles vērtības.

  1. Veiktspēja HashMap Vs. LinkedHashMap

Lai gan abas klases nodrošina salīdzināmu veiktspēju, tiek uzskatīts, ka HashMap klase ir vēlamākā izvēle, ja pasūtīšana nav problēma, jo tā negarantē kartes atkārtošanās secību. Tādas darbības kā ierakstu pievienošana, noņemšana vai atrašana, pamatojoties uz atslēgu, ir nemainīgs laiks, jo tās ir sajauktas ar taustiņu. Tātad ierakstu pievienošana, noņemšana un atrašana LinkedHashMap var būt nedaudz lēnāka nekā HashMap, jo tas Java uztur divkārši saistītu Buckets sarakstu. Turklāt HashMap nepieciešama mazāk atmiņas nekā LinkedHashMap, jo netiek uzturēta neviena kārtība.

HashMap un LinkedHashMap: salīdzināšanas diagramma

Kopsavilkums par HashMap Vs. LinkedHashMap

Lai gan HashMap un HashMap klases ir gandrīz līdzīgas veiktspējas, HashMap prasa mazāk atmiņas nekā LinkedHashMap, jo tas negarantē kartes iteratīvo secību, kas padara HashMap ierakstu pievienošanu, noņemšanu un atrašanu salīdzinoši ātrāku, nekā to pašu darot ar LinkedHashMap. Tomēr galvenā atšķirība starp abām ir kārtība: HashMap elementi nav kārtībā, savukārt LinkedHashMap elementi pēc noklusējuma atrodas atslēgu ievietošanas secībā, kas nozīmē secību, kādā atslēgas tiek ievietotas kartē. LinkedHashMap var arī uzturēt savus elementus piekļuves secībā, kas nozīmē ierakstu piekļuves secību. Tāpat kā LinkedHashMap gadījumā, ir jāuztur divkārši saistīts saraksts, tam ir mazāka veiktspēja nekā HashMap.

Atsauces

  • Attēla kredīts: https://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Grepcode_Screenshot_HashMap.jpg/640px-Grepcode_Screenshot_HashMap.jpg
  • Attēla kredīts: https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Map_Classes.jpg/640px-Map_Classes.jpg
  • Naftalins, Maurīcija un Filips Vādlers. Java Generics un kolekcijas. Sebastopole, Kalifornija: O'Reilly Media, 2006. Drukāt
  • Mughal, Khalid Azim un Rolf W. Rasmussen. Programmētāja ceļvedis Java sertifikācijai. Bostona: Addison-Wesley, 2003. Drukāt
  • Flanagan, David. Java īsumā. Sebastopole, Kalifornija: O'Reilly Media, 2005. Drukāt