![translation](https://cdn.durumis.com/common/trans.png)
Dit is een door AI vertaalde post.
equals() vs hashCode()
- Taal van de tekst: Koreaans
- •
-
Referentieland: Alle landen
- •
- Informatietechnologie
Selecteer taal
Samengevat door durumis AI
- equals() is a method that compares whether the contents of an object are the same, and hashCode() is a method that returns a unique integer value for an object, both used to compare objects.
- In hash data structures, hashCode() is used to determine the key, so equals() and hashCode() must be overridden together to ensure the same hash code.
- Using equals() and hashCode() together allows you to efficiently manage identical objects in hash data structures.
equals()
equals() vergelijkt de inhoud van objecten om te zien of ze hetzelfde zijn. Dit wordt vaak gelijkheidsonderzoek genoemd, en als equals() niet wordt overschreven, wordt intern == gebruikt, wat resulteert in identiteitsvergelijking. Daarom moet je altijd equals() gebruiken als je objecten correct wilt vergelijken op gelijkheid.
public boolean equals(Object obj) {
return (this == obj);
hashCode()
hashCode() controleert of twee objecten hetzelfde object zijn. Het heeft dezelfde identiteitsvergelijkingsfunctie als ==, maar de hashCode() -methode retourneert een unieke integerwaarde voor het object tijdens runtime. Over het algemeen retourneert het het geheugenadres van het object dat in de Heap is opgeslagen.
De methode heeft het native trefwoord, wat wordt gebruikt wanneer code die is geschreven in een andere taal dan Java, wordt gebruikt in Java.
Wat is hashing?
Hashing is het proces van het genereren van een vaste grootte uitvoerwaarde van een invoerwaarde van variabele grootte met behulp van een hashfunctie. De waarde die wordt verkregen door hashing wordt de hashcode genoemd.
equals() en hashCode()
Het is vanzelfsprekend dat identieke objecten hetzelfde geheugenadres moeten hebben, dus identieke objecten moeten dezelfde hashcode hebben. Daarom is het raadzaam om hashCode() samen met equals() te overschrijven om ervoor te zorgen dat dezelfde hashcode wordt gegarandeerd.
Hash datastructuur
public class Main {
public static void main(String[] args) throws IOException {
Set people = new HashSet<>();
people.add(new Person("제이온", 23));
people.add(new Person("제이온", 23));
System.out.println(people.size()); // 2
}
}
class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
Laten we twee identieke objecten in een HashSet-datastructuur plaatsen zoals hierboven. Als we de grootte van de Set uitprinten, krijgen we 2. Waarom is dat zo?
Dit komt omdat datastructuren die hashing gebruiken hashCode() gebruiken om de sleutel te bepalen. Met andere woorden, voordat wordt gecontroleerd of objecten identiek zijn, wordt gecontroleerd of de hashcodes van de twee objecten hetzelfde zijn, en daarna wordt bepaald of de twee objecten identiek zijn. Als hashCode() niet is overschreven, wordt de hashCode() van Object gebruikt, wat het geheugenadres retourneert waar elk object is opgeslagen. Daarom is het raadzaam om hashCode() te overschrijven naast equals() voor het geval je datastructuren gebruikt die hashing gebruiken.
public static void main(String[] args) throws IOException {
Set people = new HashSet<>();
people.add(new Person("제이온", 23));
people.add(new Person("제이온", 23));
System.out.println(people.size()); // 1
}
}
class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
Bron
Verwachte interviewvragen en antwoorden
Waarom worden equals() en hashCode() samen gebruikt?
Datastructuren die hashing gebruiken, gebruiken hashCode() om de sleutel te bepalen. Met andere woorden, voordat wordt gecontroleerd of objecten identiek zijn, wordt gecontroleerd of de hashcodes van de twee objecten hetzelfde zijn, en daarna wordt bepaald of de twee objecten identiek zijn. Als hashCode() niet is overschreven, wordt de hashCode() van Object gebruikt, wat het geheugenadres retourneert waar elk object is opgeslagen. Daarom is het raadzaam om hashCode() te overschrijven naast equals() voor het geval je datastructuren gebruikt die hashing gebruiken.