제이온

equals() против hashCode()

  • Язык написания: Корейский
  • Страна: Все страныcountry-flag
  • ИТ

Создано: 2024-04-25

Создано: 2024-04-25 22:29

equals()

equals() сравнивает содержимое объектов. Обычно это называется сравнением на равенство, и если метод equals() не переопределен, то внутренне он эквивалентен ==, что означает сравнение на идентичность. Поэтому, если вы хотите правильно сравнивать объекты на равенство, вы обязательно должны использовать equals().



hashCode()

hashCode() проверяет, являются ли два объекта одним и тем же объектом. Он выполняет функцию сравнения на идентичность, как и ==, но метод hashCode() возвращает в качестве результата уникальное целочисленное значение объекта во время выполнения. Обычно возвращается адрес памяти объекта, хранящегося в куче.



Этот метод имеет ключевое слово native, которое используется, когда язык, разработанный на другом языке, кроме Java, используется в Java.


Что такое хэш?

Хеширование — это процесс использования хэш-функции для генерации выходного значения фиксированного размера из входного значения переменного размера. Полученное значение называется хэш-кодом.


equals() и hashCode()

Так как идентичные объекты должны иметь один и тот же адрес памяти, то очевидно, что идентичные объекты должны иметь один и тот же хэш-код. Поэтому желательно переопределять не только equals(), но и hashCode(), чтобы гарантировать одинаковый хэш-код.


Структура данных хэш


Давайте добавим два эквивалентных объекта в структуру данных HashSet, как показано выше. Если вы выведете размер этого Set, он будет равен 2. Почему?


Это связано с тем, что структуры данных, использующие хэширование, используют hashCode() для определения ключа. То есть перед сравнением объектов на равенство сравниваются их хэш-коды, а затем проверяется, являются ли они эквивалентными. Если hashCode() не переопределен, то будет использоваться hashCode() из класса Object, который возвращает адрес памяти, по которому хранится каждый объект. Поэтому, при использовании хэш-структур данных, рекомендуется переопределять не только equals(), но и hashCode().



Источник


Ожидаемые вопросы на собеседовании и ответы

Почему equals() и hashCode() используются вместе?

Это связано с тем, что структуры данных, использующие хэширование, используют hashCode() для определения ключа. То есть перед сравнением объектов на равенство сравниваются их хэш-коды, а затем проверяется, являются ли они эквивалентными. Если hashCode() не переопределен, то будет использоваться hashCode() из класса Object, который возвращает адрес памяти, по которому хранится каждый объект. Поэтому, при использовании хэш-структур данных, рекомендуется переопределять не только equals(), но и hashCode().

Комментарии0

[Java] Получение простых чисел с помощью Stream в ленивом стилеВ этом посте показано, как эффективно находить простые числа с использованием Java Stream, а также пример применения ленивой оценки (Lazy Evaluation). В частности, рассматривается оптимизация вычисления квадратного корня и использование паттерна 6k ± 1 дл
김현이
김현이
김현이
김현이

July 23, 2024

Что такое JWT (JSON Web Token)?JWT — это открытый стандарт, использующий JSON-объекты для безопасной передачи информации. Он состоит из заголовка, полезной нагрузки и подписи, обеспечивая целостность и безопасность данных с помощью подписи. Отсутствует необходимость в поддержании сесс
Seize the day
Seize the day
Seize the day
Seize the day

March 4, 2024

[Для неспециалистов, выживание разработчика] 14. Краткое изложение часто задаваемых вопросов на техническом собеседовании для начинающих разработчиковМы обобщили и систематизировали часто задаваемые технические вопросы на собеседовании для начинающих разработчиков (области памяти, структуры данных, базы данных и т. д.). Надеемся, что это поможет вам подготовиться к собеседованию по разработке.
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024