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

Esta es una publicación traducida por IA.

제이온

equals() vs hashCode()

Seleccionar idioma

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

Texto resumido por la IA durumis

  • equals() es un método que compara si el contenido de los objetos es el mismo, y hashCode() es un método que devuelve un valor entero único para cada objeto, y ambos se utilizan para comparar objetos.
  • En las estructuras de datos hash, hashCode() se utiliza para determinar la clave, por lo que es necesario redefinir equals() y hashCode() juntos para garantizar el mismo código hash.
  • El uso conjunto de equals() y hashCode() permite gestionar de forma eficiente objetos idénticos en estructuras de datos hash.

equals()

equals() compara el contenido de los objetos. A menudo se llama comparación de igualdad y, si no se redefine equals(), internamente es igual que ==, por lo que es una comparación de identidad. Por lo tanto, si desea comparar objetos de manera igual, debe usar equals().


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


hashCode()

hashCode() verifica si dos objetos son el mismo objeto. Realiza la misma función de comparación de identidad que ==, pero el método hashCode() devuelve un valor entero único del objeto en tiempo de ejecución como valor de retorno. Generalmente devuelve la dirección de memoria del objeto almacenado en Heap.



Este método tiene la palabra clave nativa adjunta, lo que significa que se usa cuando se usa un lenguaje desarrollado en un lenguaje que no sea Java en Java.


¿Qué es el hash?

El hash es el proceso de usar una función hash para generar un valor de salida de tamaño fijo a partir de un valor de entrada de tamaño variable. El valor obtenido a través del hash se llama código hash.


equals() y hashCode()

Dado que los objetos idénticos deben tener la misma dirección de memoria, es obvio que los objetos idénticos deben tener el mismo código hash. Por lo tanto, es deseable escribir código que garantice el mismo código hash redefiniendo hashCode() junto con equals().


Estructura de datos hash

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


Insertaremos dos objetos iguales en la estructura de datos HashSet como se muestra arriba. Si imprimimos el tamaño de este conjunto, saldrá 2. ¿Por qué?


Esto se debe a que la estructura de datos que usa el hash usa hashCode() para determinar la clave. Es decir, antes de comparar si los objetos son iguales, compara si los códigos hash de los dos objetos son iguales y luego determina si los dos objetos son iguales. En este caso, si hashCode() no se redefine, se usa hashCode() de Object, por lo que se devuelve la dirección de memoria donde se almacenó cada objeto. Por lo tanto, es una buena práctica redefinir hashCode() junto con equals() para usar la estructura de datos hash.


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


Fuente


Preguntas y respuestas de la entrevista esperadas

¿Por qué equals() y hashCode() se usan juntos?

Esto se debe a que la estructura de datos que usa el hash usa hashCode() para determinar la clave. Es decir, antes de comparar si los objetos son iguales, compara si los códigos hash de los dos objetos son iguales y luego determina si los dos objetos son iguales. En este caso, si hashCode() no se redefine, se usa hashCode() de Object, por lo que se devuelve la dirección de memoria donde se almacenó cada objeto. Por lo tanto, es una buena práctica redefinir hashCode() junto con equals() para usar la estructura de datos hash.

제이온
제이온
제이온
제이온
[Effective Java] Item 6. Evita la creación innecesaria de objetos Esta es una guía sobre cómo reducir la creación innecesaria de objetos en Java. Para objetos inmutables como String y Boolean, es mejor usar literales y para expresiones regulares, es mejor almacenar en caché las instancias de Pattern. Además, el autoboxi

28 de abril de 2024

[Java] Colección sincronizada vs Colección concurrente Analicé comparativamente las diversas formas y ventajas y desventajas para resolver los problemas de sincronización cuando se utiliza una colección en un entorno multihilo en Java. Vector, Hashtable, Collections.synchronizedXXX y otras colecciones sincron

25 de abril de 2024

¿Qué es Java Collections Framework (JCF)? - Definición y características de JCF (JAVA) Java Collections Framework (JCF) es un conjunto de clases que proporciona un método estandarizado para manejar datos de manera fácil y eficiente en Java. JCF implementa estructuras de datos para almacenar datos y algoritmos de procesamiento como clases pa

27 de abril de 2024

[Javascript] Estructura de objetos (V8) El objeto JavaScript en el motor V8 se optimiza como una estructura, según el estado, en un modo rápido y se convierte en un modo de diccionario que funciona como un mapa hash. El modo rápido es rápido cuando la clave y el valor son casi fijos, pero cuand
곽경직
곽경직
곽경직
곽경직
곽경직

18 de marzo de 2024

¿Qué es JWT (JSON Web Token)? JSON Web Token (JWT) es un método para transmitir información de forma segura, que se compone de cabecera, carga útil y firma. El servidor utiliza una clave privada para generar la firma y mantener la integridad y seguridad del token. JWT es autónomo y si
Seize the day
Seize the day
Seize the day
Seize the day
Seize the day

4 de marzo de 2024

[python] Fundamentos de Python 1: Introducción a los Módulos de Python En este artículo, se describe la migración de un programa desarrollado en PHP a Python, incluyendo los conceptos básicos de Python y el uso de módulos. Python es un lenguaje de script que admite el tipeo dinámico y es independiente de la plataforma. Ofrec
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

27 de marzo de 2024

Modelado de datos conceptual El modelado de datos conceptual es el proceso de separar las entidades y representar la relación entre las entidades como ERD. Una entidad es una unidad de información independiente, y un atributo es la data que posee la entidad. El identificador identifi
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 de abril de 2024

[Next.js] Inyección de entorno de tiempo de ejecución Descubre cómo configurar variables de entorno en Next.js después del tiempo de compilación. Te mostramos cómo instalar cross-env y modificar los scripts para que los usuarios de Windows también puedan seguirlos fácilmente. Este método se puede utilizar pa
Sunrabbit
Sunrabbit
Sunrabbit
Sunrabbit

20 de marzo de 2024

Modelado de datos físico El modelado de datos físico es el proceso de diseñar las tablas de una base de datos relacional para que sean realmente utilizables. Se busca optimizar el rendimiento mediante la eficiencia del espacio de almacenamiento, el particionamiento de datos, el d
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

9 de abril de 2024