HashMap ja LinkedHashMap on Java-platvormi kaks levinumat ja üldotstarbelist kaardi rakendust. Need on põhimõtteliselt räsipõhised klassid, üksteisega üsna sarnased ja neid kasutatakse kaardi koostamiseks. Kaardiliides on viimane peamistest koguraamistiku liidestest, mis määratleb toimingud, mida toetavad võtmeväärtuse assotsieerumised, milles võtmed on unikaalsed. Need kaardi rakendused põhinevad räsimisalgoritmil. Kui klass HashMap rakendab järjestamata kaarte, siis klass LinkedHashMap rakendab tellitud kaarte. LinkedHashMap-i teostus on HashMap-klassi alaklass, mis tähendab, et see pärib klassi HashMap funktsioone. Nende kahe vahel pole jõudluse osas suurt vahet. Vaatame lähemalt.

Mis on HashMap?

HashMap on üks levinumaid ja nelja Java-liidese üldotstarbelise rakenduse hulgas, mis põhineb räsimisalgoritmil. See on analoogne komplekteeritud klassiga HashSet, ehkki mõlemas klassis on elemendid järjestamata. Seda rakendatakse räsitabelina, kuid erinevalt LinkedHashMapist ei säilita see klahvide ega väärtuste järjekorda. Üldiselt pakub HashMap put-get-i jaoks konstantse aja jõudlust. Klass ei ole niitkindel, kuid lubab ühe nullvõtme ja mitu nullväärtust. Kuna see ei säilita korduvat järjekorda, nõuab see vähem mälu.

Mis on LinkedHashMap?

LinkedHashMap on kaardi liidese nelja üldotstarbelise rakenduse hulgas, mis on HashMap-klassi alamklass, mis tähendab, et see pärib selle omadused. Ehkki see on jõudluse poolest väga sarnane HashMapiga, välja arvatud see, et see säilitab klahvide sisestamise järjekorra kas võtmete sisestamise järjekorda kaardile või järjekordadele, kuidas kirjetele kaardil ligipääs. Ta täpsustab oma vanema klassi lepingut, tagades järjekorra, milles iteraatorid tagastavad selle elemendid. Kuid see nõuab rohkem mälu kui HashMap, kuna see haldab Java-süsteemis kahepoolselt ühendatud loendit.

Erinevus HashMapi ja LinkedHashMapi vahel

  1. HashMap Vs põhitõed LinkedHashMap

HashMap on rämpsupõhine Mapsi liidese rakendamine Java-s. Kaardid on võtmeväärtuste paaride kogum ja neid kasutatakse siis, kui loendid on tellitud kollektsioonis. HashMap on kollektsiooniklass, mis salvestab väärtuse võtme-väärtuse paarides. Lihtsamalt öeldes kaardistab see võtmed väärtustele, see tähendab, et suudab võtme põhjal väärtuse leida. LinkedHashMap on sarnaselt HashMapile kaardiliidese lingitud loendite rakendamine, välja arvatud see, et see hoiab sinna sisestatud elementide järjekorda. See on HashMapi alaklass, mis pärib selle omadused. LinkedHashMap täpsustab oma vanema klassi HashMap lepingut, tagades järjekorra, milles iteraatorid tagastavad selle elemendid.

  1. Itereerimiskorraldus

HashMapi ja LinkedHashMapi peamine erinevus on järjekord. HashMapi elemendid pole korras, täiesti juhuslikud, samas kui LinkedHashMapi elemendid on tellitud. LinkedHashMap-i kanded on võtmete sisestamise järjekorras, st järjekorras, milles võtmed sisestatakse kaardile. See tähendab, et esmalt loetletakse esimene kaardile sisestatud võti, nii ka sellega seotud väärtus ja viimane loendisse sisestatud viimane kirje. LinkedHashMapil on ennustatav iteratsioonijärjestus, mis tähendab, et ta saab ka oma elemente juurdepääsu järjekorras hoida, st järjekordadele, millele kirjetele juurde pääseb.

  1. Rakendamine

Nii HashMap kui LinkedHashMap klassid kasutavad Java-kaardi liidese rakendamiseks räsimist, välja arvatud juhul, kui HashMap on rakendatud räsitabelina, samas kui LinkedHashMap peab kahest küljest lingitud koppide nimekirja, mis jooksevad läbi kõigi selle sisestuste. Seetõttu nõuab LinkedHashMap rohkem mälu kui HashMap, sest erinevalt HashMapist hoiab see tellimust. See eemaldab HashMapi kaootilise tellimise, kandmata lisakulusid, mis oleks TreeMapiga muidu tekkinud. Lisaks sellele on LinkedHashMap-klass väga sarnane HashMap-klassiga paljudes aspektides, näiteks sünkroniseerimisel ja nullklahvidel / väärtustel, kuna mõlemad võimaldavad ühte nullvõtit ja mitut nullväärtust.

  1. HashMap Vs jõudlus LinkedHashMap

Kuigi mõlemad klassid tagavad võrreldava jõudluse, arvatakse HashMap-klassi eelistatuimaks valikuks, kui tellimine pole probleem, kuna see ei taga kaardi iteratiivset järjekorda. Toimingud, näiteks võtmepõhiste kirjete lisamine, eemaldamine või leidmine, on pidev aeg, kuna need võti räsivad. Seega võib LinkedHashMapis kirjete lisamine, eemaldamine ja leidmine olla pisut aeglasem kui HashMapis, kuna see säilitab Java-ämbrite kahepoolselt seotud loendit. Lisaks nõuab HashMap vähem mälu kui LinkedHashMap, kuna järjekorda ei säilitata.

HashMap vs LinkedHashMap: võrdlusdiagramm

HashMap Vs kokkuvõte LinkedHashMap

Kuigi nii HashMap kui ka HashMap klassid on jõudluses peaaegu sarnased, nõuab HashMap vähem mälu kui LinkedHashMap, kuna see ei taga kaardi iteratsiooni järjekorda, mis muudab HashMap-i kirjete lisamise, eemaldamise ja leidmise suhteliselt kiiremaks, kui sama teha LinkedHashMap. Põhiline erinevus nende kahe vahel on aga järjekord: HashMap-i elemendid pole korras, samas kui LinkedHashMap-i elemendid on vaikimisi võtmete sisestamise järjekorras, mis tähendab võtmete kaardile sisestamise järjekorda. LinkedHashMap saab oma elemente säilitada ka juurdepääsu järjekorras, mis tähendab kirjetele juurdepääsu järjekorda. Nagu LinkedHashMapi puhul, tuleb säilitada ka kahekordse lingiga loend, selle toimivus on väiksem kui HashMapil.

Viited

  • Kujutise krediit: https://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Grepcode_Screenshot_HashMap.jpg/640px-Grepcode_Screenshot_HashMap.jpg
  • Kujutise krediit: https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Map_Classes.jpg/640px-Map_Classes.jpg
  • Naftalin, Maurice ja Philip Wadler. Java Generics ja kogud. Sebastopol, California: O'Reilly Media, 2006. Trükk
  • Mughal, Khalid Azim ja Rolf W. Rasmussen. Programmeerija juhend Java sertifitseerimise jaoks. Boston: Addison-Wesley, 2003. Trükk
  • Flanagan, David. Java lühidalt. Sebastopol, California: O'Reilly Media, 2005. Trükk