Verschil tussen HashMap en Hashtable in Java

Schrijver: Laura McKinney
Datum Van Creatie: 2 April 2021
Updatedatum: 1 Kunnen 2024
Anonim
14.11 HashMap and HashTable in Java
Video: 14.11 HashMap and HashTable in Java

Inhoud


De HashMap en Hashtable, beide worden gebruikt om een groep objecten die zijn vertegenwoordigd in paar. Elk paar wordt genoemd binnenkomst voorwerp. De verzameling van inzendingen wordt verwezen door het object van HashMap en Hashtable. Sleutels in een verzameling moeten uniek of onderscheidend zijn. Het verschil tussen HashMap en Hashtable is dat Hash kaart implementeert met name de kaartinterface, terwijl de Hashtable breidt de Dictionary-klasse (legacy-klasse) uit die opnieuw is ontworpen om de Map-interface te implementeren. Het andere belangrijke verschil is dat objecten van HashMap dat zijn unsynchronized terwijl het doel van Hashtable is gesynchroniseerd.

Laten we de onderstaande vergelijkingstabel bekijken om nog meer verschillen tussen HashMap en Hashtable te leren.

  1. Vergelijkingstabel
  2. Definitie
  3. Belangrijkste verschillen
  4. overeenkomsten
  5. Gevolgtrekking

Vergelijkingstabel

Basis voor vergelijkingHash kaartHashtable
Implementeren / uitbreidenDe HashMap-klasse implementeert de kaartinterface en breidt een AbstractMap-klasse uit.De Hashtable is een uitbreiding van de klasse Dictionary Legacy, maar deze is opnieuw ontworpen en implementeert nu ook de kaartinterface.
SynchronisatieHashMap is niet gesynchroniseerd en daarom is het HashMap-object niet veilig.Hashtable is gesynchroniseerd, en daarom is het object van Hashtable thread safe.
Toetsen / ValueEen sleutel kan de Null slechts één keer retourneren, maar een waarde kan een willekeurig aantal keren Null retourneren.Een sleutel kan Null niet retourneren omdat deze wordt gebruikt om de hash-code te verkrijgen die zal worden gebruikt als een index van de hashtabel, noch kan een waarde Null retourneren.
Standaard initiële capaciteitDe standaard initiële capaciteit van HashMap is 16.De standaard initiële capaciteit van Hashtable is 11.
doorkruisenHashMap wordt doorkruist door Iterator.Net als de Map-klasse ondersteunt Hashtable ook niet direct Iterator voor verplaatsingen en daarom gebruikt het Enumerator.


Definitie van HashMap

HashMap is een klasse die de Kaart interface en breidt de AbstractMap klasse gebruikt de hashtabel. Het object van de HashMap verwijst naar een verzameling / set van paar waarbij elke sleutel wordt toegewezen aan een bepaalde waarde. Sleutels in een verzameling moeten uniek zijn omdat ze worden gebruikt om de waarde op te halen. Aan de andere kant kunnen de waarden in een verzameling worden gedupliceerd. De verklaring van de HashMap-klasse en de constructeurs van de HashMapclass zijn als volgt:

/ * K staat voor sleutel en V staat voor waarde * / klasse HashMap / * Constructeurs van HashMap-klasse * / HashMap () HashMap (kaart <? Breidt K uit,? Breidt V> m) HashMap (int capaciteit) HashMap (int capaciteit, float fillRatio)

De eerste constructor is een standaardconstructor die een leeg object van HashMap initialiseert met een standaardcapaciteit van 16 en een standaardvulverhouding van 0,75. De tweede constructor initialiseert de hashmap met de waarde van m. De derde constructor maakt een hashmap met de initiële capaciteit die overeenkomt met de waarde die is opgegeven in argument "capaciteit". De vierde constructor initialiseert de hashmap met een capaciteit en een opvulverhouding die in de parameters is opgegeven. laten we nu leren hoe we de items in een hashkaart kunnen invoeren.


Hashmap hm = nieuwe Hashmap (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Jordan", 200); System.out.ln (hm); / * uitvoer * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordanië = 200}

In bovenstaande code kun je zien dat ik een leeg HashMap-object heb gemaakt hm met standaard initiële capaciteit en standaard vullingsverhouding. Vervolgens heb ik vier items in de hashmap ingevoegd met de put (K, V) -methode die de sleutel toewijst aan de waarde. U kunt zien dat items niet worden bewerkt in een volgorde waarin u ze invoert, omdat de invoegvolgorde niet is vastgelegd. Overweeg nu een geval dat u al een vermelding hebt in de hashmap en daarna probeer je put (K1, V5) in te voegen, d.w.z. je probeert dezelfde sleutel met een andere waarde in kaart te brengen. Dan vervangt de put-methode de oude waarde V1 door de nieuwe waarde V2 en retourneert de oude waardeV1, anders, als we nooit proberen de waarde van een sleutel te vervangen, retourneert de put-methode Null voor die sleutel.

Definitie van Hashtable

Hashtable is een klasse die de Woordenboek klasse die een legacy-klasse is en opnieuw is ontworpen om de Kaart interface. De hashtabel gebruikt de hashtabel als gegevensstructuur. De Hashtable is vergelijkbaar met HashMap, omdat hier ook het object van Hashtable verwijst naar de verzameling items waarbij elke entry een paar . Alle sleutels in een verzameling moeten echter uniek zijn, de waarden kunnen worden gedupliceerd. De sleutels worden met name gebruikt om de hash-codewaarde te verkrijgen die de index bepaalt, waarbij de paar wordt opgeslagen in een hashtabel. In een hashtabel kan noch een sleutel, noch een waarde de aanwijzer Null retourneren. Laten we eens kijken naar de verklaring van de Hashtable-klasse en de constructeurs van de hashtable-klasse.

/ * K geeft de sleutel aan en V geeft de waarde aan die is gekoppeld aan de sleutel * / class Hashtable / * constructors van Hashtable * / Hashtable () Hashtable (int grootte) Hashtable (int grootte, float fillRatio) Hashtable (kaart <? strekt K,? strekt V> m)

In bovenstaande code is de eerste constructor een standaardconstructor die een leeg object van een klasse Hashtable maakt, de standaardgrootte is 11 en de standaardvulverhouding is 0,75. De tweede constructor maakt een hashtabel met de grootte die overeenkomt met de waarde die is opgegeven in de parameter "grootte". De derde constructor maakt een hashtabel met een grootte en een opvulverhouding die in de parameter is opgegeven. De vierde constructor initialiseert de hashtabel met de waarde m. Laten we nu leren hoe de paar in de hashtabel.

Hashtable ht = new Hashtable (); ht.put (nieuwe hashCode (2), 275); ht.put (nieuwe hashCode (12), 250); ht.put (nieuwe hashCode (16), 150); ht.put (nieuwe hashCode (8), 200); System.out.ln (ht); / * uitvoer * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

In bovenstaande code heb ik een leeg object van Hashtable gemaakt en vier ingangen ingevoegd met de methode put (). Inside put-methode noemde ik hashCode () die de hash-codewaarde berekent en retourneert die zal fungeren als de indexwaarde voor het invoerobject. Zoals je kunt zien, heb ik de grootte van de hashtabel niet genoemd, dus deze wordt standaard 11. Ook hier wordt de invoegvolgorde niet bewaard en daarom werd de invoer ingevoerd als ed items niet in volgorde werden weergegeven.

  1. De HashMap werktuigen Kaart interface en breidt een abstracte klasse uit, AbstractMap terwijl de Hashtable de abstracte klasse uitbreidt Woordenboek, dat ook een Legacy-klasse is, later opnieuw ontworpen om te implementeren Kaart interface.
  2. Het HashMap-object is unsynchronized d.w.z. meerdere threads kunnen er tegelijkertijd op werken en daarom is het niet thread-safe. Aan de andere kant zijn de objecten van Hashtable gesynchroniseerd d.w.z. als een thread op een object van Hashtable wil werken, moet deze een vergrendeling op dat object verwerven zodat geen andere thread toegang tot dat object kan krijgen en daarom is het thread safe.
  3. In HashMap kan de sleutel terugkeren Slechts één keer nulen waarde kan terugkeren Meerdere keren nul. Aan de andere kant kan een sleutel nooit Null retourneren zoals deze werd gebruikt om de hash-codewaarde te verkrijgen die wordt gebruikt als een index om de pair en noch een waarde kan Null retourneren.
  4. De standaardcapaciteit van een hashtabel in de HashMap-klasse is 16 terwijl de standaardcapaciteit van een hashtabel in Hashtable is 11.
  5. De iterator kan Hashmap-vermeldingen doorkruisen. Aan de andere kant ondersteunt de hashtafel niet direct de Iterator en dus in het algemeen teller wordt gebruikt voor het doorlopen van de items in Hashtable.

overeenkomsten:

  • HashMap en Hashtable gebruiken beide de datastructuur van de hash tafel.
  • HashMap en Hashtable beide werktuigen Kaart interface
  • Invoegvolgorde blijft niet behouden in zowel HashMap als Hashtable en gebaseerd op de hashcode verkregen met behulp van sleutels.
  • In HashMap en Hashtable moeten sleutels zijn uniek terwijl de waarden kunnen zijn gedupliceerde.
  • HashMap en Hashtable kunnen beide bevatten heterogene objecten voor zowel sleutels als waarden.
  • HashMap en Hashtable, beide werktuigen serializable en Cloneable interfaces maar niet, willekeurige toegang.
  • HashMap en Hashtable hebben beide een standaardvulverhouding 0.75.
  • HashMap en Hashtable zijn beide het beste voor ophalen of zoeken operaties.

Gevolgtrekking:

HashMap is beter in prestaties omdat zijn objecten niet gesynchroniseerd zijn en meerdere threads er tegelijkertijd op kunnen werken en daarom is het sneller dan Hashtable.