Wat is hashen
Het is het proces waarbij een object wordt omgezet in een geheel getal. De gehele waarde helpt bij het indexeren en sneller zoeken.
Wat is HashMap
HashMap is een onderdeel van het Java-collectieframework. Het maakt gebruik van een techniek genaamd Hashing. Het implementeert de kaartinterface. Het slaat de gegevens op in het paar Sleutel en Waarde. HashMap bevat een array van knooppunten en het knooppunt wordt weergegeven als een klasse. Het maakt intern gebruik van een array en LinkedList-gegevensstructuur voor het opslaan van sleutel en waarde. Er zijn vier velden in HashMap.
Voordat u de interne werking van HashMap begrijpt, moet u op de hoogte zijn van de hashCode() en equals() methode.
Linux-bestanden
Voeg sleutel en waardepaar in HashMap in
We gebruiken de methode put() om het sleutel- en waardepaar in de HashMap in te voegen. De standaardgrootte van HashMap is 16 (0 tot 15).
Voorbeeld
In het volgende voorbeeld willen we drie (sleutel, waarde) paren invoegen in de HashMap.
HashMap map = new HashMap(); map.put('Aman', 19); map.put('Sunny', 29); map.put('Ritesh', 39);
Laten we eens kijken bij welke index het sleutel-waardepaar in HashMap wordt opgeslagen. Wanneer we de methode put() aanroepen, berekent deze de hashcode van de sleutel 'Aman.' Stel dat de hashcode van 'Aman' 2657860 is. Om de sleutel in het geheugen op te slaan, moeten we de index berekenen.
verschil tussen bedrijf en bedrijf
Index berekenen
Index minimaliseert de grootte van de array. De formule voor het berekenen van de index is:
Index = hashcode(Key) & (n-1)
Waarbij n de grootte van de array is. Daarom is de indexwaarde voor 'Aman':
Index = 2657860 & (16-1) = 4
De waarde 4 is de berekende indexwaarde waar de sleutel en waarde in HashMap worden opgeslagen.
Hash-botsing
Dit is het geval wanneer de berekende indexwaarde voor twee of meer sleutels hetzelfde is. Laten we de hashcode voor een andere sleutel 'Sunny' berekenen. Stel dat de hashcode voor 'Sunny' 63281940 is. Om de sleutel in het geheugen op te slaan, moeten we de index berekenen met behulp van de indexformule.
Index=63281940 & (16-1) = 4
De waarde 4 is de berekende indexwaarde waar de sleutel in HashMap wordt opgeslagen. In dit geval controleert de methode equals() of beide sleutels gelijk zijn of niet. Als de sleutels hetzelfde zijn, vervangt u de waarde door de huidige waarde. Anders verbindt u dit knooppuntobject met het bestaande knooppuntobject via de LinkedList. Daarom worden beide sleutels opgeslagen in index 4.
json-formaat voorbeeld
Op dezelfde manier zullen we de sleutel 'Ritesh' opslaan. Stel dat de hashcode voor de sleutel 2349873 is. De indexwaarde is 1. Daarom wordt deze sleutel opgeslagen op index 1.
get() methode in HashMap
get() methode wordt gebruikt om de waarde op te halen via de sleutel. De waarde wordt niet opgehaald als u de sleutel niet kent. Wanneer de get(K Key)-methode wordt aangeroepen, berekent deze de hashcode van de sleutel.
Stel dat we de sleutel 'Aman' moeten halen. De volgende methode wordt aangeroepen.
map.get(new Key('Aman'));
Het genereert de hashcode als 2657860. Bereken nu de indexwaarde van 2657860 met behulp van de indexformule. De indexwaarde zal 4 zijn, zoals we hierboven hebben berekend. get() methode zoekt naar de indexwaarde 4. Het vergelijkt het eerste element Key met de gegeven Key. Als beide sleutels gelijk zijn, retourneert het de waarde else check voor het volgende element in het knooppunt, als dit bestaat. In ons scenario wordt het gevonden als het eerste element van het knooppunt en wordt de waarde 19 geretourneerd.
Laten we nog een sleutel 'Sunny' halen.
De hashcode van de sleutel 'Sunny' is 63281940. De berekende indexwaarde van 63281940 is 4, zoals we hebben berekend voor de put()-methode. Ga naar index 4 van de array en vergelijk de sleutel van het eerste element met de gegeven sleutel. Het vergelijkt ook Keys. In ons scenario is de gegeven sleutel het tweede element en is het volgende van het knooppunt nul. Het vergelijkt het tweede element Sleutel met de opgegeven Sleutel en retourneert de waarde 29. Het retourneert null als het volgende van het knooppunt nul is.