equals()
equals() vergelijkt de inhoud van objecten. Dit wordt vaak gelijkheidsvergelijking genoemd. Als equals() niet wordt overschreven, is het intern gelijk aan ==, dus wordt er een identiteitsvergelijking uitgevoerd. Daarom moet u altijd equals() gebruiken als u objecten correct wilt vergelijken op gelijkheid.
hashCode()
hashCode() controleert of twee objecten hetzelfde object zijn. Het heeft dezelfde functie als de identiteitsvergelijking ==, maar de hashCode()-methode retourneert een unieke integerwaarde van het object tijdens runtime. Meestal wordt het geheugenadres van het object dat in de Heap is opgeslagen, geretourneerd.
Deze methode heeft het native-trefwoord. Dit trefwoord wordt gebruikt wanneer een taal die is ontwikkeld in een andere taal dan Java, wordt gebruikt in Java.
Wat is een hash?
Hashing is het proces van het genereren van een uitvoerwaarde met een vaste grootte uit een invoerwaarde met een variabele grootte met behulp van een hashfunctie. De waarde die wordt verkregen door hashing wordt hashcode genoemd.
equals() en hashCode()
Omdat hetzelfde object hetzelfde geheugenadres moet hebben, is het vanzelfsprekend dat hetzelfde object dezelfde hashcode moet hebben. Daarom is het raadzaam om naast equals() ook hashCode() te overschrijven om dezelfde hashcode te garanderen.
Hash-gegevensstructuur
Laten we twee gelijke objecten toevoegen aan de HashSet-gegevensstructuur zoals hierboven weergegeven. Als we de grootte van deze set afdrukken, zal deze 2 zijn. Waarom is dat?
Dit komt omdat gegevensstructuren die hash gebruiken, hashCode() gebruiken om de sleutel te bepalen. Met andere woorden, voordat wordt gecontroleerd of objecten gelijk zijn, wordt eerst gecontroleerd of de hashcodes van de twee objecten gelijk zijn, en daarna wordt gecontroleerd of de twee objecten gelijk zijn. Als hashCode() niet wordt overschreven, wordt de hashCode() van Object gebruikt, dus wordt het geheugenadres geretourneerd waar elk object is opgeslagen. Daarom is het raadzaam om naast equals() ook hashCode() te overschrijven voor het geval dat hash-gegevensstructuren worden gebruikt.
Bron
Verwachte interviewvragen en antwoorden
Waarom worden equals() en hashCode() samen gebruikt?
Dit komt omdat gegevensstructuren die hash gebruiken, hashCode() gebruiken om de sleutel te bepalen. Met andere woorden, voordat wordt gecontroleerd of objecten gelijk zijn, wordt eerst gecontroleerd of de hashcodes van de twee objecten gelijk zijn, en daarna wordt gecontroleerd of de twee objecten gelijk zijn. Als hashCode() niet wordt overschreven, wordt de hashCode() van Object gebruikt, dus wordt het geheugenadres geretourneerd waar elk object is opgeslagen. Daarom is het raadzaam om naast equals() ook hashCode() te overschrijven voor het geval dat hash-gegevensstructuren worden gebruikt.
Reacties0