Автоматический 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> три элемента:
два одинаковых и один с другим отделом.
Выведите размер множества.