Java-samlingsramen innehåller en uppsättning samlingskurser. Varje klass har sina egna prestanda styrkor och svagheter. Några av klasserna ger fullständiga implementeringar som kan användas som-är. Andra är abstrakta som ger skelettimplementeringar som används som utgångspunkter för att skapa samlingar. Samlingsimplementeringarna använder ramen för synkroniserad omslag för att tillhandahålla synkroniserade klasser, annars är implementeringarna osynkroniserade. Flera klasser ger implementeringar av kartgränssnittet.
Java-plattformen innehåller tre generella kart implementeringar: HashMap, TreeMap och LinkedHashMap. HashMap och Hashtable är två samlingar i Java som används för att lagra nyckel / värdepar i ett hashbord. Hashtable är en synkroniserad karta och HashMap är en osynkroniserad karta. Ändå, om du behöver använda en synkroniserad karta, är en Hashtable snabbare än att använda en HashMap i ett synkroniserat omslag. Båda är hashbaserade samlingar i Java men de har sin rättvisa andel av skillnaderna. Vi lyfter fram några viktiga skillnader mellan de två för att hjälpa dig att bättre förstå villkoren.
HashMap är en Map implementering baserat på ett hashbord som ger konstant prestanda för att infoga och lokalisera par. HashMap-klassen ger en kartaimplementering som bygger på en Hashtable datastruktur. Denna implementering stöder alla kartoperationer och tillåter flera nullvärden men endast en nollnyckel. Den använder nyckel / värdepar för att lagra värden i ett hashbord. Det är en osynkroniserad karta vilket betyder att den inte är trådsäker och kan inte delas mellan flera trådar utan ordentlig synkronisering.
Till skillnad från HashMap är Hashtable en synkroniserad karta och den är trådsäker vilket innebär att den kan delas mellan flera trådar. I Hashtable anger du ett objekt som kan användas som en nyckel och det värde som går med nyckeln. En Hashtable kartlägger nycklar till värden med hjälp av en hash-funktion. Java tillhandahåller denna funktion i form av Objects hashcode () -metod, vilka klasser åsidosätter för att tillhandahålla lämpliga hashkoder. Till skillnad från HashMap stöder Hashtable inte nullvärden och nollnycklar eftersom det finns nollkontroll i implementeringsmetoden för Hashtable.
Båda är hashbaserade samlingar i Java för att lagra data i nyckel / värdepar. HashMap är en Map implementering baserat på ett hashbord som ger konstant prestanda för att infoga och lokalisera par. Prestanda kan justeras med hjälp av konstruktörer som låter dig ställa in kapaciteten och belastningsfaktorn för hashbordet. Den grundläggande Hashtable är ganska lik HashMap, även efter metodnamnen. Det lagrar nyckel / värdepar i hashbord. I Hashtable anger du ett objekt som kan användas som en nyckel och det värde som går med nyckeln.
Både HashMap och Hashtable använder hashingsteknik för att lagra värden baserat på nyckeln. Som HashMap använder Hashtable nyckel / värdepar för att lagra värden i ett hashbord. Men nyckeln skillnaden mellan de två är synkronisering. HashMap är en osynkroniserad karta medan Hashtable är en synkroniserad karta. Det betyder att HashMap inte är trådsäker och kan inte delas mellan flera trådar utan ordentlig synkroniseringskod. Tvärtom är Hashtable trådgängligt och kan delas mellan flera trådar. Hashtable är snabbare än att använda en HashMap i ett synkroniserat omslag, om du behöver använda en synkroniserad karta.
HashMap-klassen ger en kartaimplementering som bygger på en Hashtable datastruktur. Denna implementering stöder alla kartoperationer och tillåter flera nullvärden men endast en nollnyckel så att den kan behålla unika nyckelegenskaper. Det ger emellertid inga garantier för den ordning i vilken posterna lagras. Hashtable kartlägger å andra sidan nycklar till värden med hjälp av en hashfunktion. Till skillnad från HashMap stöder Hashtable inte nullvärden och nollnycklar eftersom det finns nollkontroll i implementeringsmetoden för Hashtable.
Eftersom HashMap inte är en synkroniserad karta är det mycket snabbare och bättre än en Hashtable när det gäller prestanda, och använder faktiskt mindre minne än Hashtable. Trots att de är nästan identiska är Hashtable lite långsammare än en HashMap men snabbare än en synkroniserad HashMap. Det är allmänt inte säkert att använda Hashtable med multithreaded åtkomst eftersom bara metoderna är synkroniserade. Hashtable är den synkroniserade motsvarigheten till HashMap. Osynkroniserade objekt fungerar bättre jämfört med synkroniserade objekt, precis som en Hashtable fungerar bättre i en enda trådad miljö.
HashMap-klassen ger dig en osorterad, orörd karta. Så när du behöver en karta och du bryr dig inte om den ordning i vilken posterna är lagrade, så är HashMap vägen att gå.
Hashtable, precis som Vector, har varit från förhistoriska Java-tider. Precis som Vector är en synkroniserad motsvarighet till den modernare och avancerade ArrayList, är Hashtable den synkroniserade motsvarigheten till HashMap. En klass kan dock inte synkroniseras, så när vi säger att Hashtable är en synkroniserad karta betyder det att klassens nyckelmetoder är synkroniserade.
Medan båda är nästan identiska ligger skillnaden i hur de synkroniseras och hur de fungerar. HashMap fungerar bättre i en multi-threaded miljö medan Hashtable fungerar bättre i en enda gängad miljö.