translation

Текст, переведенный ИИ.

제이온

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

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

Резюме публикации от ИИ durumis

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

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().

Логическое моделирование данныхВ данной статье описывается процесс логического моделирования данных, включающий преобразование концептуальной модели данных в модель реляционной базы данных. Рассматриваются способы обработки отношений 1:1, 1:N, N:M, а также нормализация (1NF, 2NF, 3NF).
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

April 9, 2024

Концептуальное моделирование данныхКонцептуальное моделирование данных — это процесс, в котором сущности и отношения представляются в виде ERD (диаграммы «сущность-связь»), закладывая основу для проектирования базы данных.
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

April 8, 2024

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

April 3, 2024

Что такое маркировка данных? Типы, преимущества и недостаткиМаркировка данных — это процесс присвоения тегов данным, чтобы искусственный интеллект мог их понять. Он используется в различных областях, например, для различения собак и кошек, и помогает повысить производительность моделей.
세상 모든 정보
세상 모든 정보
세상 모든 정보
세상 모든 정보

March 29, 2024

[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