Java-samlingsrammen gir et sett med samlingsklasser. Hver klasse har sine egne ytelsesstyrker og svakheter. Noen av klassene gir full implementeringer som kan brukes som-er. Andre er abstrakte som gir skjelettimplementeringer som brukes som utgangspunkt for å skape samlinger. Samlingsimplementeringene bruker rammen med synkronisert innpakning for å gi synkroniserte klasser, ellers er implementeringene usynkronisert. Flere klasser gir implementeringer av kartgrensesnittet.
Java-plattformen inneholder tre generelle kart-implementeringer: HashMap, TreeMap og LinkedHashMap. HashMap og Hashtable er to samlinger i Java som brukes til å lagre nøkkel / verdi par i et hashbord. Hashtable er en synkronisert kart og HashMap er en usynkronisert kart. Likevel, hvis du trenger å bruke en synkronisert kart, er en Hashtable raskere enn å bruke en HashMap i et synkronisert omslag. Begge er hash-baserte samlinger i Java, men de har sin rettferdige andel av forskjeller. Vi markerer noen viktige forskjeller mellom de to for å hjelpe deg bedre å forstå vilkårene.
HashMap er en Kart implementering basert på et hashbord som gir konstant tid ytelse for å sette inn og lokalisere par. HashMap-klassen gir en kartimplementering som er basert på en Hashtable datastruktur. Denne implementeringen støtter alle kartoperasjoner og tillater flere nullverdier, men bare en nullnøkkel. Den bruker nøkkel / verdi par til å lagre verdier i et hashbord. Det er en usynkronisert kart som betyr at den ikke er trådsikker og kan ikke deles mellom flere tråder uten riktig synkronisering.
I motsetning til HashMap er Hashtable en synkronisert kart, og den er trådsikker, noe som betyr at den kan deles mellom flere tråder. I Hashtable angir du et objekt som kan brukes som nøkkel og verdien som går med nøkkelen. En Hashtable kartlegger nøkler til verdier ved hjelp av en hash-funksjon. Java gir denne funksjonen i form av Objects hashcode () -metode, hvilke klasser tilsidesetter for å gi passende hashkoder. I motsetning til HashMap støtter Hashtable ikke nullverdier og null-nøkler fordi det er nullkontroll i put-metoden implementering av Hashtable.
Begge er hashbaserte samlinger i Java som brukes til å lagre data i nøkkel / verdipar. HashMap er en Kart implementering basert på et hashbord som gir konstant tid ytelse for å sette inn og lokalisere par. Ytelsen kan justeres ved bruk av konstruktører som lar deg sette kapasiteten og belastningsfaktoren til hashbordet. Den grunnleggende Hashtable er ganske lik HashMap, selv ned metodens navn. Det lagrer nøkkel / verdi par i hashbord. I Hashtable angir du et objekt som kan brukes som nøkkel og verdien som går med nøkkelen.
Både HashMap og Hashtable bruker hashing teknikker til å lagre verdier basert på nøkkelen. Som HashMap bruker Hashtable nøkkel / verdi par til å lagre verdier i et hashbord. Men hovedforskjellen mellom de to er synkronisering. HashMap er en usynkronisert kart mens Hashtable er en synkronisert kart. Dette betyr at HashMap ikke er trådsikker og kan ikke deles mellom flere tråder uten riktig synkroniseringskode. Tvert imot er Hashtable trådssikker og kan deles mellom flere tråder. Hashtable er raskere enn å bruke en HashMap i et synkronisert omslag, hvis du trenger å bruke en synkronisert kart.
HashMap-klassen gir en kartimplementering som er basert på en Hashtable datastruktur. Denne implementeringen støtter alle kartoperasjoner og tillater flere nullverdier, men bare en nullnøkkel, slik at den kan opprettholde unike nøkkelegenskaper. Men det gir ingen garantier for rekkefølgen der oppføringene er lagret. Hashtable, derimot, kartlegger nøkler til verdier ved hjelp av en hash-funksjon. I motsetning til HashMap støtter Hashtable ikke nullverdier og null-nøkler fordi det er nullkontroll i put-metoden implementering av Hashtable.
Fordi HashMap ikke er en synkronisert kart, er det mye raskere og bedre enn en Hashtable når det gjelder ytelse, og bruker faktisk mindre minne enn Hashtable. Selv om de er nesten identiske, er Hashtable litt tregere enn en HashMap, men raskere enn en synkronisert HashMap. Det er ikke sikkert å bruke Hashtable med multithreaded tilgang fordi bare metodene er synkronisert. Hashtable er den synkroniserte motparten til HashMap. Usynkroniserte objekter utfører bedre når de sammenlignes med synkroniserte objekter, akkurat som en Hashtable fungerer bedre i et gjenget miljø.
HashMap-klassen gir deg et usortert, uordnet kart. Så når du trenger et kart, og du bryr deg ikke om bestillingen der oppføringene er lagret, er HashMap veien å gå.
Hashtable, akkurat som Vector, har vært inne fra forhistoriske Java-tider. Akkurat som Vector er en synkronisert motstykke til den mer moderne og avanserte ArrayList, er Hashtable den synkroniserte motparten til HashMap. En klasse kan imidlertid ikke synkroniseres, så når vi sier at Hashtable er en synkronisert kart, betyr det at klassens viktige metoder er synkronisert.
Mens begge er nesten identiske, ligger forskjellen i hvordan de synkroniseres og hvordan de utfører. HashMap virker bedre i et multi-threaded miljø, mens Hashtable fungerer bedre i et gjenget miljø.