Java kogude raamistik pakub kogumiklasside komplekti. Igal klassil on oma esinemise tugevused ja nõrkused. Mõned klassid pakuvad täielikke rakendusi, mida saab kasutada praeguses olukorras. Teised on abstraktsed, pakkudes skeletirakendusi, mida kasutatakse kogude loomise lähtepunktina. Kollektsiooni teostused kasutavad sünkroonitud klasside pakkumiseks sünkroonitud ümbrise raamistikku, vastasel juhul pole rakendused sünkroniseeritud. Mitmed klassid pakuvad kaardiliidese rakendusi.

Java platvorm sisaldab kolme üldotstarbelist kaardi rakendust: HashMap, TreeMap ja LinkedHashMap. HashMap ja Hashtable on kaks Java kollektsiooni, mida kasutatakse võtme- / väärtuspaaride hoidmiseks räsitabelis. Hashtable on sünkroniseeritud kaart ja HashMap on sünkroniseerimata kaart. Kui teil on vaja kasutada sünkroonitud kaarti, on Hashtable kiirem kui sünkroonitud ümbrises HashMap'i kasutamine. Mõlemad on Java-is räsipõhised kogud, kuid neil on erinevuste osas õiglane osa. Toome välja mõned peamised erinevused nende kahe vahel, et aidata teil mõisteid paremini mõista.

Mis on HashMap?

HashMap on rämpstabelil põhinev kaardirakendus, mis pakub konstantse aja jõudlust paaride sisestamiseks ja leidmiseks. HashMap-klass pakub kaardirakendust, mis põhineb Hashtable andmestruktuuril. See teostus toetab kõiki kaarditoiminguid ja lubab mitut nullväärtust, kuid ainult ühte nullvõtit. See kasutab võtme- / väärtuspaare väärtuste räsitabelisse salvestamiseks. See on sünkroniseerimata kaart, mis tähendab, et see pole lõimekindel ja seda ei saa ilma õige sünkroonimiseta mitme lõime vahel jagada.

Mis on hashtable?

Erinevalt HashMapist on Hashtable sünkroniseeritud kaart ja see on lõimekindel, mis tähendab, et seda saab jagada mitme lõime vahel. Jaotises Hashtable määrake objekt, mida saab võtmena kasutada, ja väärtus, mis kaasneb võtmega. Hashtable kaardistab väärtused räsifunktsiooni abil. Java pakub seda funktsiooni objekti räsikoodi () meetodi kujul, mille klassid alistuvad, et pakkuda sobivaid räsikoode. Erinevalt HashMapist ei toeta Hashtable nullväärtusi ja nullvõtmeid, kuna funktsiooni Hashtable put meetodi rakendamisel on nullkontroll.

Erinevus HashMap ja Hashtable vahel

  1. HashMap Vs põhitõed Rõõmustav

Mõlemad on Java-is räsipõhised kogud, mida kasutatakse andmete hoidmiseks võtme- / väärtuspaarides. HashMap on rämpstabelil põhinev kaardirakendus, mis pakub konstantse aja jõudlust paaride sisestamiseks ja leidmiseks. Jõudlust saab reguleerida konstruktorite abil, mis võimaldavad teil määrata räsilaua mahutavuse ja koormuskoefitsiendi. Põhiline Hashtable on üsna sarnane HashMapiga, isegi meetodinimed. See salvestab võtme- / väärtuspaari räsitabelis. Jaotises Hashtable määrake objekt, mida saab võtmena kasutada, ja väärtus, mis kaasneb võtmega.

  1. HashMap Vs sünkroonimine Rõõmustav

Nii HashMap kui ka Hashtable kasutavad võtmepõhiste väärtuste salvestamiseks räsimistehnikaid. Nagu HashMap, kasutab ka Hashtable võtme- / väärtuspaare, et väärtusi räsitabelisse salvestada. Peamine erinevus nende kahe vahel on siiski sünkroonimine. HashMap on sünkroniseerimata kaart, Hashtable on aga sünkroniseeritud kaart. See tähendab, et HashMap ei ole lõimedekindel ja seda ei saa ilma õige sünkroonimiskoodita mitme lõime vahel jagada. Vastupidi, Hashtable on niitkindel ja seda saab jagada mitme lõime vahel. Hashtable on kiirem kui HashMap'i kasutamine sünkroonitud ümbrises, kui peate kasutama sünkroonitud kaarti.

  1. HashMap Vs nullvõtmed ja nullväärtused Rõõmustav

HashMap-klass pakub kaardirakendust, mis põhineb Hashtable andmestruktuuril. See teostus toetab kõiki kaarditoiminguid ja võimaldab mitut nullväärtust, kuid ainult ühte nullvõtit, nii et see suudaks säilitada unikaalseid võtmeomadusi. Siiski ei anna see kirjete säilitamise järjekorda. Seevastu Hashtable kaardistab väärtused klahvifunktsiooni abil väärtustele. Erinevalt HashMapist ei toeta Hashtable nullväärtusi ja nullvõtmeid, kuna funktsiooni Hashtable put meetodi rakendamisel on nullkontroll.

  1. HashMap Vs jõudlus Rõõmustav

Kuna HashMap ei ole sünkroonitud kaart, on jõudluse osas palju kiirem ja parem kui hashtable ning tegelikult kasutab see vähem mälu kui hashtable. Ehkki need on praktiliselt identsed, on Hashtable natuke aeglasem kui HashMap, kuid kiirem kui sünkroonitud HashMap. Oma olemuselt ei ole turvaline Hashtable kasutamist mitme keermega juurdepääsuga, kuna sünkroonitakse ainult meetodid. Hashtable on HashMapi sünkroonitud vaste. Sünkroniseerimata objektid toimivad paremini kui sünkroonitud objektid, nagu räsitud toimib paremini ühes keermestatud keskkonnas.

HashMap vs. Hashtable: võrdlustabel

HashMap Vs kokkuvõte Rõõmustav

HashMap-klass annab teile sorteerimata kaardi. Nii et kui teil on vaja kaarti ja te ei hooli kirjete säilitamise järjekorrast, on tee HashMap.

Hashtable, nagu ka Vector, on olnud Java-ajast eelajaloost. Nii nagu Vector on moodsama ja täiustatud ArrayListiga sünkroniseeritud vaste, on ka Hashtable HashMapi sünkroniseeritud vaste. Klassi ei saa aga sünkroonida, nii et kui ütleme, et Hashtable on sünkroniseeritud kaart, tähendab see, et klassi peamised meetodid on sünkroniseeritud.

Kuigi mõlemad on praktiliselt identsed, seisneb erinevus nende sünkroonimises ja toimivuses. HashMap toimib paremini mitme keermega keskkonnas, samas kui Hashtable toimib paremini ühe keermestatud keskkonnas.

Viited

  • Kujutise krediit: https://upload.wikimedia.org/wikipedia/commons/thumb/7/7b/Java.util.Map_hierarchy.svg/2000px-Java.util.Map_hierarchy.svg.png
  • Kujutise krediit: https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Hash_table_5_0_1_1_1_1_1_LL.svg/500px-Hash_table_5_0_1_1_1_1_1_LL.svg.png
  • Sierra, Katherine. Kõik ühes Java 2. Uus Delhi: Dreamtech Press, 2003. Prindi
  • Friesen, Jeff. Java algus 7. NYC: Apress, 2012. Prindi
  • Shirazi, Jack. Java jõudluse häälestamine. Sebastopol, California: O'Reilly Media, 2003. Trükk
  • Eckel, Bruce. Mõeldes Java keeles. New Jersey: Prentice Hall, 2003. Trükk