Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

Ceci est un post traduit par IA.

제이온

equals() vs hashCode()

Choisir la langue

  • Français
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

Texte résumé par l'IA durumis

  • equals() est une méthode qui compare si le contenu des objets est identique, hashCode() est une méthode qui renvoie une valeur entière unique de l'objet, et les deux sont utilisés pour comparer les objets.
  • Dans les structures de données de hachage, hashCode() est utilisé pour déterminer la clé, il est donc nécessaire de redéfinir equals() et hashCode() ensemble pour garantir le même code de hachage.
  • L'utilisation conjointe de equals() et hashCode() permet de gérer efficacement les objets identiques dans les structures de données de hachage.

equals()

equals() compare le contenu d'un objet pour voir s'il est identique. C'est souvent appelé une comparaison d'égalité. Si equals() n'est pas redéfini, il sera implicitement égal à ==, ce qui est une comparaison d'identité. Par conséquent, si vous souhaitez comparer correctement les objets en termes d'égalité, vous devez toujours utiliser equals().


public boolean equals(Object obj) { 
    return (this == obj); 


hashCode()

hashCode() vérifie si deux objets sont le même objet. Il fonctionne comme une comparaison d'identité comme ==, mais la méthode hashCode() renvoie une valeur entière unique pour l'objet au moment de l'exécution. Il renvoie généralement l'adresse mémoire de l'objet stocké dans le tas.



Cette méthode a le mot-clé native attaché, ce qui signifie qu'elle est utilisée lorsque vous utilisez un langage développé en dehors de Java en Java.


Qu'est-ce que le hachage ?

Le hachage est le processus de génération d'une sortie de taille fixe à partir d'une entrée de taille variable à l'aide d'une fonction de hachage. La valeur obtenue par hachage est appelée code de hachage.


equals() et hashCode()

Puisque les objets identiques doivent avoir la même adresse mémoire, il est évident que les objets identiques doivent avoir le même code de hachage. Par conséquent, il est préférable d'écrire du code de manière à garantir le même code de hachage en redéfinissant également hashCode() en plus de equals().


Structure de données de hachage

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);
    }


Insérons deux objets identiques dans la structure de données HashSet comme indiqué ci-dessus. Si vous imprimez la taille de cet ensemble, vous obtiendrez 2. Pourquoi ?


C'est parce que la structure de données utilisant le hachage utilise hashCode() pour déterminer la clé. Autrement dit, avant de comparer si les objets sont identiques, il compare si les codes de hachage des deux objets sont identiques, puis détermine si les deux objets sont égaux. Si hashCode() n'est pas redéfini, il utilisera hashCode() de l'objet, ce qui renverra l'adresse mémoire où chaque objet est stocké. Par conséquent, il est préférable de redéfinir hashCode() en plus de equals() pour les cas où vous utilisez une structure de données de hachage.


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);
    }


Source


Questions et réponses d'entretien anticipées

Pourquoi equals() et hashCode() sont-ils utilisés ensemble ?

C'est parce que la structure de données utilisant le hachage utilise hashCode() pour déterminer la clé. Autrement dit, avant de comparer si les objets sont identiques, il compare si les codes de hachage des deux objets sont identiques, puis détermine si les deux objets sont égaux. Si hashCode() n'est pas redéfini, il utilisera hashCode() de l'objet, ce qui renverra l'adresse mémoire où chaque objet est stocké. Par conséquent, il est préférable de redéfinir hashCode() en plus de equals() pour les cas où vous utilisez une structure de données de hachage.

제이온
제이온
제이온
제이온
[Effective Java] Évitez la création d'objets inutiles Ce guide vous explique comment réduire la création d'objets inutiles en Java. Pour les objets immuables comme String et Boolean, il est préférable d'utiliser des littéraux. Il est également conseillé de mettre en cache les instances Pattern pour les expre

28 avril 2024

[Java] Synchronized Collection vs Concurrent Collection Dans cet article, nous avons analysé les différentes méthodes et les avantages et les inconvénients pour résoudre les problèmes de synchronisation lors de l'utilisation de collections dans un environnement multithread en Java. Nous avons présenté les cara

25 avril 2024

Qu'est-ce que le framework de collections Java (JCF) ? - Définition et caractéristiques du JCF (JAVA) Le framework de collections Java (JCF) est un ensemble de classes Java qui fournit une manière standardisée de traiter efficacement de grandes quantités de données. Le JCF implémente des structures de données de stockage et des algorithmes sous forme de c

27 avril 2024

[Javascript] Structure d'objet (V8) L'objet JavaScript dans le moteur V8 est optimisé comme une structure en fonction de l'état, passant du mode Fast, optimisé comme une structure, au mode Dictionary qui fonctionne comme une table de hachage. Le mode Fast est rapide lorsque les clés et les
곽경직
곽경직
곽경직
곽경직
곽경직

18 mars 2024

Modélisation de données conceptuelle La modélisation de données conceptuelle est le processus de séparation des entités et de représentation de leurs relations sous forme de diagramme ERD. Une entité est une unité d'information indépendante et un attribut est une donnée possédée par une enti
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 avril 2024

Modélisation de données logiques pour le projet de tableau Kanban 2 Cet article explique étape par étape comment réaliser une modélisation de données logiques à partir d'un ERD de modélisation de données conceptuelles, en soulignant les difficultés rencontrées lors du processus de normalisation et en proposant des solutio
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

9 avril 2024

Modélisation de données physique La modélisation de données physiques est le processus de conception des tables d'une base de données relationnelle pour une utilisation réelle, en visant l'optimisation des performances grâce à l'efficacité de l'espace de stockage, le partitionnement des
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

9 avril 2024

[Non-majors, Surviving as Developers] 14. Résumé des questions d'entrevue technique fréquemment posées aux développeurs débutants Guide de préparation aux entrevues techniques pour les développeurs débutants. Zone de mémoire principale, structures de données, RDBMS et NoSQL, programmation procédurale et orientée objet, surcharge et surcharge, algorithmes de remplacement de page, pro
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 avril 2024

[Concurrency] Opération atomique : Clôture de mémoire et ordre de mémoire Ce billet de blog explique comment prendre en compte l'ordre de la mémoire dans les opérations atomiques et l'importance des options d'ordre. Il fournit une description des diverses options d'ordre, telles que Relaxed, Acquire, Release, AcqRel et SecCst,
곽경직
곽경직
곽경직
곽경직
곽경직

12 avril 2024