Skillnaden mellan HashMap och Hashtable i Java

Författare: Laura McKinney
Skapelsedatum: 2 April 2021
Uppdatera Datum: 5 Maj 2024
Anonim
Рефакторинг: switch vs if-else vs enum vs HashMap [Шаблон "Команда"]
Video: Рефакторинг: switch vs if-else vs enum vs HashMap [Шаблон "Команда"]

Innehåll


HashMap och Hashtable, båda används för att representera en grupp av objekt som är representerade i par. Varje par heter Inträde objekt. De samling av poster hänvisas av objektet HashMap och Hashtable. Nycklar i en samling måste vara unika eller distinkta. Skillnaden mellan HashMap och Hashtable är den HashMap implementerar särskilt kartgränssnittet medan Hashtable utökar ordboksklassen (arvsklass) som omutbildas för att implementera kartgränssnittet. Den andra viktiga skillnaden är att objekt av HashMap är osynkroniserad medan Hashtables föremål är synkroniserad.

Låt oss se jämförelsetabellen nedan för att lära dig mer skillnader mellan HashMap och Hashtable.

  1. Jämförelsediagram
  2. Definition
  3. Viktiga skillnader
  4. Likheter
  5. Slutsats

Jämförelsediagram

Grund för jämförelseHashMapHashtable
Implementera / utvidgaHashMap-klassen implementerar kartgränssnittet och utökar en AbstractMap-klass.Hashtabellen sträcker sig över klassen Dictionary Legacy men den är omkonstruerad och nu implementerar den också Kartgränssnitt.
SynkroniseringHashMap är osynkroniserad och därför är HashMap-objektet inte gängat säkert.Hashtabellen är synkroniserad, och följaktligen är Hashtablets objekt trådsäker.
Nycklar / värdeEn knapp kan returnera Null en gång, men ett värde kan returnera Null valfritt antal gånger.En nyckel kan inte returnera Null eftersom den används för att erhålla hashkoden som kommer att användas som ett index för hashtabellen, och inte heller ett värde kan returnera Null.
Standard startkapacitetStandardkapaciteten för HashMap är 16.Standardkapaciteten för Hashtable är 11.
förflyttningsHashMap korsas av Iterator.Liksom Map-klass Hashtable inte heller stöder Iterator för att korsa och därmed använder den Enumerator.


Definition av HashMap

HashMap är en klass som implementerar Karta gränssnitt och utökar AbstractMap klass använder hash-tabellen. HashMap's objekt hänvisar till en samling / uppsättning av par där varje nyckel är mappad till ett visst värde. Nycklar i en samling måste vara unika eftersom de används för att hämta värdet. Å andra sidan kan värdena i en samling dupliceras. Förklaringen av HashMap-klassen och konstruktörer av HashMapclass är som följer:

/ * K representerar nyckel, och V representerar värde * / klass HashMap / * Konstruktörer av HashMap-klassen * / HashMap () HashMap (karta <? Förlänger K,? Förlänger V> m) HashMap (int-kapacitet) HashMap (int-kapacitet, float fillRatio)

Den första konstruktören är en standardkonstruktör som initialiserar ett tomt objekt från HashMap med en standardkapacitet på 16 och ett standardfyllningsförhållande på 0,75. Den andra konstruktören initierar haschkartan med värdet m. Den tredje konstruktören skapar en hashkarta med den initiala kapaciteten som motsvarar det värde som anges i argumentet "kapacitet". Den fjärde konstruktören initierar haschkarta med en kapacitet och ett fyllningsförhållande som anges i parametrarna. låt oss nu lära oss att mata inmatningarna på en hashkarta.


Hashmap hm = new Hashmap (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Jordanien", 200); System.out.ln (hm); / * utgång * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordanien = 200}

I ovanstående kod kan du se att jag skapade ett tomt HashMap-objekt hm med standardkapacitet och standardfyllningsförhållande. Sedan satte jag in fyra poster i haschkartan med hjälp av put (K, V) -metoden som kartlägger nyckeln till värdet. Du kan observera att poster inte redigeras i en sekvens som du matar dem eftersom införingsordningen inte är fixerad. Tänk nu på ett fall som du redan har en post i haschkartan och därefter försöker du sätta in put (K1, V5), dvs du försöker kartlägga samma nyckel med ett annat värde. Sedan ersätter put-metoden det gamla värdet V1 med det nya värdet V2 och returnerar det gamla värdet V1, annars, om vi aldrig försöker ersätta en nyckels värde returnerar put-metoden Null för den nyckeln.

Definition av Hashtable

Hashtable är en klass som utvidgar Ordbok klass som är en arvsklass och reengineerered för att genomföra Karta gränssnitt. Hashtabellen använder hash-tabellen som dess datastruktur. Hashtabellen liknar HashMap eftersom här också hänvisar objektet till Hashtable till insamlingen av poster där varje post är ett par av . Å andra sidan måste alla nycklar i en samling vara unika, värdena kan dupliceras. Nycklarna används särskilt för att erhålla hashkodvärdet som avgör indexet, där par lagras i en hash-tabell. I en hashtabell kan varken en nyckel eller ett värde returnera Null-pekaren. Låt oss se deklarationen om Hashtable-klassen och konstruktörer av hashtable-klass.

/ * K specificerar nyckeln och V specificerar värdet associerat med nyckeln * / klass Hashtable / * konstruktörer av Hashtable * / Hashtable () Hashtable (int-storlek) Hashtable (int-storlek, float fillRatio) Hashtable (karta <? sträcker sig K,? sträcker sig V> m)

I ovanstående kod är den första konstruktören en standardkonstruktör som skapar ett tomt objekt i en klass Hashtable, dess standardstorlek är 11 och standardfyllningsförhållandet är 0,75. Den andra konstruktören skapar en hashtabell med den storlek som motsvarar värdet som anges i parametern ”storlek”. Den tredje konstruktören skapar ett hashbord med en storlek och ett fyllningsförhållande som anges i parametern. Den fjärde konstruktören initierar hashtabellen med värdet m. Låt oss nu lära dig hur du sätter in par i hashbordet.

Hashtabell ht = ny Hashtabell (); ht.put (ny hashCode (2), 275); ht.put (ny hashCode (12), 250); ht.put (ny hashCode (16), 150); ht.put (ny hashCode (8), 200); System.out.ln (ht); / * utgång * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

I koden ovan skapade jag ett tomt objekt från Hashtable och satte in fyra poster med put () -metoden. Inside put-metoden kallade jag hashCode () som beräknar och returnerar hashkodvärdet som kommer att fungera som indexvärdet för postobjektet. Som ni kan se nämnde jag inte storleken på hashtabellen så det kommer som standard att vara 11. Här är inte insättningsordern bevarad och därmed när ed-poster inte dyker upp i sekvens matades den.

  1. HashMap implementerar Karta gränssnitt och utökar en abstrakt klass, AbstractMap medan Hashtabellen utvidgar den abstrakta klassen Ordbok, som också är en Legacy-klass, som senare omarbetades för att genomföra Karta gränssnitt.
  2. HashMap-objektet är osynkroniserad d.v.s. flera trådar kan arbeta på den på samma gång och följaktligen motiverar den inte gängsäker. Å andra sidan är objekten från Hashtable synkroniserad dvs om en tråd vill arbeta på ett objekt från Hashtable måste den skaffa ett lås på det objektet så att ingen annan tråd kan komma åt det objektet och därmed är det trådsäker.
  3. I HashMap kan nyckeln återgå Null bara en gångoch värdet kan återgå Noll flera gånger. Å andra sidan kan A-tangenten aldrig returnera Null eftersom den användes för att erhålla hashkodvärdet som används som ett index för att lagra par och inte heller ett värde kan returnera Null.
  4. Standardkapaciteten för en hashtabell i HashMap-klassen är 16 Standardkapaciteten för en hashtabell i Hashtable är dock 11.
  5. De iterator kan gå igenom Hashmap-poster. Å andra sidan stöder Hashtabellen inte direkt Iteratorn och därmed i allmänhet enumerator används för att korsa posten i Hashtable.

Likheter:

  • HashMap och Hashtable använder båda datastrukturen för hashbord.
  • HashMap och Hashtable båda redskapen Karta gränssnitt
  • Insättningsordern bevaras inte i både HashMap och Hashtable och baserat på haschkoden erhållen med nycklar.
  • I HashMap och Hashtable måste nycklar vara unik medan värdena kan vara duplicerad.
  • HashMap och Hashtable kan båda innehålla heterogena föremål för både nycklar och värden.
  • HashMap och Hashtable, båda redskapen serializable och Cloneable gränssnitt men inte, slumpmässig åtkomst.
  • HashMap och Hashtable har båda standardfyllningsförhållandena 0.75.
  • HashMap och Hashtable är båda bäst för hämtning eller sökande operationer.

Slutsats:

HashMap har bättre prestanda eftersom dess objekt är osynkroniserade och flera trådar kan fungera på det samtidigt och därför är det snabbare än Hashtable.