Що станеться, якщо hashCode () поверне те саме значення, тоді як значення equals () будуть різними?

Функція hashcode(), яка завжди повертає те саме значення, дійсна, але не дуже ефективна. У цьому випадку порівняння завжди повертатиме true, тому метод equals() завжди виконуватиметься. Немає покращення продуктивності в цьому випадку.

Значення hashCode() можна використовувати для швидкого пошуку об’єкта, використовуючи хеш-код як адресу до сегмента хеш-таблиці, де він зберігається. Якщо кілька об’єктів повертають однакове значення з hashCode(), це означає, що вони будуть зберігатися в одному відрі.

У HashMap, якщо два або більше ключів мають однаковий хеш-код, ситуація називається Хеш-колізія. Хеш-колізії є звичайним явищем функцій хешування. Хороший дизайн функції хешування може зменшити випадки появи одного хеш-коду для різних ключів, але цього не можна уникнути зовсім.

Він порівнює hashCode, який завжди дорівнює, оскільки є константою, а потім спочатку використовує == для порівняння. Якщо ключ не є тим самим об’єктом (тобто. == є false), лише тоді дорівнює використовується для перевірки їх рівності.

Java hashCode() Значення хеш-коду об’єкта може змінюватися під час кількох запусків однієї програми. Якщо два об’єкти рівні відповідно до методу equals(), то їхній хеш-код має бути однаковим. Якщо два об’єкти нерівні відповідно до методу equals(), їхній хеш-код не обов’язково повинен відрізнятися.

Якщо ми не замінимо дорівнює та hashCode правильно, ці колекції можуть не працювати належним чином. Об’єкти, які слід вважати однаковими, можуть бути неправильно ідентифіковані, що призведе до дублювання наборів або неправильного пошуку з карт.

Related Post

Який герой сказав, що ти хороша людина, Чарлі Браун?Який герой сказав, що ти хороша людина, Чарлі Браун?

Чарлі Браун: Бо щастя – це будь-хто і все, що ти любиш. Люсі ван Пелт Люсі ван Пелт Люсіль «Люсі» Ван Пелт — вигаданий персонаж коміксів «Арахіс», написаних і намальованих