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 é uma postagem traduzida por IA.

제이온

equals() vs hashCode()

  • Idioma de escrita: Coreana
  • País de referência: Todos os países country-flag

Selecionar idioma

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

Texto resumido pela IA durumis

  • equals() é um método que compara se o conteúdo de um objeto é o mesmo, e hashCode() é um método que retorna um valor inteiro exclusivo para um objeto, ambos são usados para comparar objetos.
  • Em estruturas de dados hash, hashCode() é usado para determinar a chave. Portanto, equals() e hashCode() devem ser redefinidos juntos para garantir o mesmo código hash.
  • Usar equals() e hashCode() juntos permite gerenciar objetos idênticos de forma eficiente em estruturas de dados hash.

equals()

equals() compara se o conteúdo de um objeto é o mesmo. Isso é comumente chamado de comparação de igualdade e, se equals() não for sobrescrito, ele é internamente igual a ==, portanto é uma comparação de identidade. Portanto, se você quiser comparar corretamente objetos de igualdade, você deve usar equals().


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


hashCode()

hashCode() verifica se dois objetos são o mesmo objeto. Ele funciona como uma comparação de identidade como ==, mas o método hashCode() retorna um valor inteiro exclusivo do objeto em tempo de execução. Geralmente, ele retorna o endereço de memória do objeto armazenado no Heap.



Este método tem a palavra-chave native anexada, que é uma palavra-chave usada quando uma linguagem desenvolvida em outra linguagem que não Java é usada em Java.


O que é hash?

Hashing é o processo de usar uma função hash para gerar uma saída de tamanho fixo a partir de uma entrada de tamanho variável. O valor obtido por meio de hashing é chamado de código hash.


equals() e hashCode()

Objetos idênticos devem ter o mesmo endereço de memória, portanto é óbvio que objetos idênticos devem ter o mesmo código hash. Portanto, é recomendável escrever o código para garantir que o mesmo código hash seja garantido, sobrescrevendo hashCode() junto com equals().


Estrutura de dados hash

public class Main {

    public static void main(String[] args) throws IOException {
        Set people = new HashSet<>();

        people.add(new Person("Jayon", 23));
        people.add(new Person("Jayon", 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);
    }


Vamos inserir dois objetos idênticos na estrutura de dados HashSet como mostrado acima. Se imprimirmos o tamanho desse Set, ele retornará 2. Por que?


Isso ocorre porque a estrutura de dados que usa hashing usa hashCode() para determinar a Key. Ou seja, antes de comparar se os objetos são idênticos, ele compara se os códigos hash dos dois objetos são os mesmos e, em seguida, determina se os dois objetos são iguais. Nesse caso, se hashCode() não for sobrescrito, Object hashCode() será usado, portanto o endereço de memória onde cada objeto é armazenado será retornado. Portanto, é melhor sobrescrever hashCode() além de equals() para quando você usa uma estrutura de dados hash.


public static void main(String[] args) throws IOException {
        Set people = new HashSet<>();

        people.add(new Person("Jayon", 23));
        people.add(new Person("Jayon", 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);
    }


Fonte


Perguntas e respostas esperadas da entrevista

Por que equals() e hashCode() são usados ​​juntos?

Isso ocorre porque a estrutura de dados que usa hashing usa hashCode() para determinar a Key. Ou seja, antes de comparar se os objetos são idênticos, ele compara se os códigos hash dos dois objetos são os mesmos e, em seguida, determina se os dois objetos são iguais. Nesse caso, se hashCode() não for sobrescrito, Object hashCode() será usado, portanto o endereço de memória onde cada objeto é armazenado será retornado. Portanto, é melhor sobrescrever hashCode() além de equals() para quando você usa uma estrutura de dados hash.

제이온
제이온
제이온
제이온
[Effective Java] Item 6. Evite a criação de objetos desnecessários Este é um guia sobre como reduzir a criação de objetos desnecessários em Java. Para objetos imutáveis como String, Boolean, é melhor usar literais e, para expressões regulares, é melhor armazenar em cache a instância Pattern. Além disso, o autoboxing pode

28 de abril de 2024

[Java] Coleção Sincronizada vs Coleção Concorrente Neste artigo, analisamos os prós e contras de diferentes métodos para resolver problemas de sincronização ao usar coleções em ambientes multithread no Java. Apresentamos as características e diferenças de desempenho das coleções sincronizadas, como Vector

25 de abril de 2024

O que é o Java Collections Framework (JCF)? - Definição e recursos do JCF (JAVA) O Java Collections Framework (JCF) é um conjunto de classes Java que fornece um método padronizado para processar vários dados de forma eficiente. O JCF implementa estruturas de dados de armazenamento e algoritmos como classes para aumentar a reusabilidad

27 de abril de 2024

[Javascript] Estrutura do Objeto (V8) O Objeto JavaScript no motor V8 é otimizado como uma estrutura dependendo do estado, alternando entre o modo Rápido e o modo Dicionário, que funciona como um mapa hash. O modo Rápido é rápido quando as chaves e valores são quase fixos, mas quando uma nova
곽경직
곽경직
곽경직
곽경직
곽경직

18 de março de 2024

Modelagem de dados conceitual A modelagem de dados conceitual é o processo de separar entidades, representar suas relações em um ERD. Uma entidade é uma unidade de informação independente, e um atributo é o dado que uma entidade possui. Um identificador identifica exclusivamente uma e
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 de abril de 2024

[Não graduado, sobrevivendo como desenvolvedor] 14. Resumo do conteúdo da entrevista técnica frequente para desenvolvedores juniores Guia de preparação para entrevista técnica para desenvolvedores juniores. Área de memória principal, estrutura de dados, RDBMS e NoSQL, orientação de procedimentos e orientação de objetos, sobreposição e sobrecarga, algoritmo de substituição de página, pr
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 de abril de 2024

O que é JWT (JSON Web Token)? JSON Web Token (JWT) é um padrão aberto para transmitir informações de forma segura, usando um token assinado para garantir a integridade e a segurança das informações. O cabeçalho inclui o tipo de token e o algoritmo de assinatura, enquanto a carga útil
Seize the day
Seize the day
Seize the day
Seize the day
Seize the day

4 de março de 2024

[Concorrência] Operação Atômica: Memory Fence e Memory Ordering Esta postagem de blog explica como considerar a ordem da memória em operações atômicas e a importância das opções de ordenamento. Ele explica as várias opções de ordenamento, como Relaxado, Adquirir, Lançar, AcqRel e SecCst, junto com os prós e contras de
곽경직
곽경직
곽경직
곽경직
곽경직

12 de abril de 2024

Modelagem de dados lógica do projeto Kanban Board 2 Explica passo a passo como realizar a modelagem de dados lógica com base no ERD de modelagem de dados conceitual, apresentando os desafios e soluções que surgem durante o processo de normalização. Aborda em detalhes a preocupação de separar o author_id e
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

9 de abril de 2024