Verschil tussen HashMap en LinkedHashMap

HashMap en LinkedHashMap zijn twee van de meest algemene en algemene Map-implementaties in het Java-platform. Het zijn in feite op hash gebaseerde klassen, die veel op elkaar lijken en die worden gebruikt voor het maken van een kaart. De interface van Map is de laatste van de belangrijkste Collections Framework-interfaces die de bewerkingen definieert die worden ondersteund door een set sleutel / waarde-associaties waarin de sleutels uniek zijn. Deze kaartimplementaties zijn gebaseerd op een hash-algoritme. Terwijl de klasse HashMap ongeordende kaarten implementeert, implementeert de klasse LinkedHashMap bestelde kaarten. De LinkedHashMap-implementatie is een subklasse van de klasse HashMap, wat betekent dat deze de kenmerken van klasse HashMap overneemt. Er is niet veel verschil tussen de twee in termen van prestaties. Laten we kijken.

Wat is HashMap? 

HashMap is een van de meest voorkomende en een van de vier algemene doeleinden van de kaartinterface in Java op basis van een hash-algoritme. Het is analoog aan de ingestelde klasse HashSet, hoewel de elementen in beide klassen niet zijn geordend. Het is geïmplementeerd als een hash-tabel, maar anders dan bij LinkedHashMap bewaart het geen enkele volgorde op sleutels of waarden. Over het algemeen biedt HashMap constante tijdsprestaties voor put en get. De klasse is niet threadveilige maar staat één null-sleutel en meerdere null-waarden toe. Omdat het geen iteratie-volgorde aanhoudt, vereist het minder geheugen.

Wat is LinkedHashMap?

LinkedHashMap is een van de vier algemene implementatie van de kaartinterface, die een subklasse van de klasse HashMap is, wat betekent dat deze de eigenschappen ervan overerft. Hoewel het qua prestaties erg lijkt op HashMap, maar met behoud van de invoegvolgorde van sleutels, hetzij in volgorde waarin de sleutels in de kaart zijn ingevoegd, hetzij de volgorde waarin de invoer op de kaart is geopend. Het verfijnt het contract van zijn bovenliggende klasse door de volgorde te garanderen waarin iterators de elementen retourneren. Het vereist echter meer geheugen dan een HashMap omdat het een dubbel gelinkte lijst in Java onderhoudt.

Verschil tussen HashMap en LinkedHashMap

  1. Basisprincipes van HashMap Vs. LinkedHashMap

HashMap is een op hash gebaseerde implementatie van de kaartinterface in Java. Kaarten zijn een verzameling sleutel / waarde-paren en worden gebruikt wanneer Lijsten in de bestelde verzameling zijn. HashMap is een collectieklasse die waarde opslaat in sleutel / waarde-paren. In eenvoudige bewoordingen wijst het sleutels toe aan waarden, wat betekent dat het een waarde kan lokaliseren op basis van een sleutel. LinkedHashMap is een gekoppelde lijstimplementatie van de kaartinterface, net zoals HashMap, behalve dat het de orders van elementen erin invoert. Het is een subklasse van HashMap die de functies ervan overneemt. LinkedHashMap verfijnt het contract van zijn bovenliggende klasse, HashMap, door de volgorde te garanderen waarin iterators hun elementen retourneren.

  1. Iteratie volgorde

Het belangrijkste verschil tussen HashMap en LinkedHashMap is volgorde. Elementen van een HashMap zijn niet in orde, totaal willekeurig, terwijl elementen van LinkedHashMap zijn besteld. De invoer van een LinkedHashMap bevindt zich in de invoegvolgorde voor sleutels, de volgorde waarin de sleutels in de kaart zijn ingevoegd. Dit betekent dat de eerste sleutel die in de kaart is ingevoegd eerst wordt geïnventariseerd, evenals de waarde die eraan is gekoppeld en de laatste invoer die als laatste is geïnsereerd. LinkedHashMap heeft een voorspelbare iteratieorder, wat betekent dat het ook zijn elementen in de toegangsvolgorde kan behouden, de volgorde waarin de toegangen zijn geopend.

  1. Implementatie

Beide HashMap- en LinkedHashMap-klassen gebruiken hashing om de kaartinterface in Java te implementeren, behalve dat HashMap is geïmplementeerd als een hashtabel, terwijl LinkedHashMap een dubbel gekoppelde lijst van buckets bijhoudt die alle vermeldingen doorloopt. Dit is de reden waarom LinkedHashMap meer geheugen vereist dan HashMap omdat het, in tegenstelling tot HashMap, een bestelling onderhoudt. Het verwijdert de chaotische bestelling door HashMap, zonder de extra kosten die anders met TreeMap zouden zijn gemaakt. Daarnaast lijkt de klasse LinkedHashMap sterk op de klasse HashMap in veel aspecten, zoals synchronisatie en null-sleutels / waarden, omdat beide een nul-sleutel en meerdere null-waarden toestaan.

  1. Prestaties voor HashMap Vs. LinkedHashMap

Hoewel beide klassen vergelijkbare prestaties bieden, wordt aangenomen dat de klasse HashMap de voorkeur geniet als bestellen geen probleem is, omdat dit niet garandeert wat de iteratieve volgorde van de kaart betreft. Bewerkingen zoals toevoegen, verwijderen of zoeken op basis van een sleutel zijn constante tijden, omdat ze de sleutel hashen. Dus het toevoegen, verwijderen en vinden van vermeldingen in een LinkedHashMap kan iets langzamer zijn dan in een HashMap omdat het een dubbel gelinkte lijst van buckets in Java onderhoudt. Bovendien heeft HashMap minder geheugen nodig dan LinkedHashMap omdat er geen volgorde wordt onderhouden.

HashMap vs. LinkedHashMap: Vergelijkingstabel

Samenvatting van HashMap Vs. LinkedHashMap

Hoewel de HashMap- en HashMap-klassen bijna hetzelfde presteren, heeft HashMap minder geheugen nodig dan een LinkedHashMap omdat dit de iteratieve volgorde van de kaart niet garandeert, waardoor het toevoegen, verwijderen en vinden van items in een HashMap relatief sneller gaat dan hetzelfde doen met een LinkedHashMap. Het belangrijkste verschil tussen de twee is echter volgorde: de elementen van een HashMap zijn niet in orde, terwijl de elementen van een LinkedHashMap standaard in de volgorde van de sleutelinvoegingen staan, wat betekent de volgorde waarin de sleutels in de kaart worden ingevoegd. LinkedHashMap kan ook zijn elementen in de toegangsvolgorde behouden, dit wil zeggen de volgorde waarin de toegangen worden gebruikt. Net als bij LinkedHashMap moet een dubbel gelinkte lijst worden bijgehouden, deze heeft minder prestaties dan HashMap.