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 kollektsioonid, 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.
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 keermekindel ja seda ei saa ilma õige sünkroonimiseta mitme lõime vahel jagada.
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 Object hashcode () meetodi kujul, mille klassid alistuvad, et pakkuda sobivaid räsi koode. Erinevalt HashMapist ei toeta Hashtable nullväärtusi ja nullvõtmeid, kuna Hashtable'i Put meetodi rakendamisel on nullkontroll.
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.
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.
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. Hashtable seevastu kaardistab võtmed väärtustesse räsi funktsiooni abil. Erinevalt HashMapist ei toeta Hashtable nullväärtusi ja nullvõtmeid, kuna Hashtable'i Put meetodi rakendamisel on nullkontroll.
Kuna HashMap pole sünkroonitud kaart, on see 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 sünkroniseeritud HashMap-i vaste. Sünkroniseerimata objektid toimivad sünkroonitud objektidega võrreldes paremini, nagu räsitud toimib paremini ühes keermestatud keskkonnas..
HashMap-klass annab teile sortimata kaardi. Nii et kui teil on vaja kaarti ja te ei hooli kirjete talletamise järjekorrast, on HashMap see viis.
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ünkroonitud.
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.