Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvOpRcHC 81 of 147 menu
◀ ▶

Автоматический hashCode у record в Java

Метод hashCode возвращает целое число, связанное с содержимым объекта. У record компилятор строит его по тем же компонентам, что и equals: если два экземпляра равны, у них совпадает и код хеша:

record Post(String title, int views) {}

Создадим две одинаковые записи и сравним их hashCode:

Post a = new Post("News", 12); Post b = new Post("News", 12); System.out.println(a.hashCode() == b.hashCode());

Правило согласованности такое же, как у класса Object: равные объекты дают один hashCode. Разные записи обычно дают разные числа, но совпадение возможно - это нормально для хеш-функции:

Post p1 = new Post("News", 12); Post p2 = new Post("Guide", 40); System.out.println(p1.hashCode()); System.out.println(p2.hashCode());

hashCode важен, когда record кладут в HashSet или используют как ключ HashMap. Без согласованного кода коллекция не найдёт элемент, хотя equals вернёт true:

import java.util.HashSet; public class Main { public static void main(String[] args) { HashSet<Post> set = new HashSet<>(); set.add(new Post("News", 12)); set.add(new Post("News", 12)); System.out.println(set.size()); } }

Сделайте record Employee с компонентами name и id. Создайте два объекта с одинаковыми данными и выведите true, если их hashCode() совпадает.

Сделайте record Employee с компонентами name и dept. Добавьте в HashSet<Employee> три элемента: два одинаковых и один с другим отделом. Выведите размер множества.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить