Класс HashSet

Класс HashSet реализует интерфейс Set и создает коллекцию, которая используется для хранения хеш-таблиц.
Элементы хеш-таблицы хранятся в виде пар ключ-значение. Ключ определяет  ячейку для хранения значения. Содержимое ключа служит для определения однозначного значения, называемого хеш-кодом.
Мы можем считать, что хеш-код это ID объекта, хотя он не должен быть уникальным. Этот хеш-код служит далее в качестве индекса, по которому сохраняются данные, связанные с ключом.

Рассмотрим пример вычисления хеш-кодов:

Использование hashCode() фото

Правила написания методов hashCode() и equals():

  1. Для одного и того же объекта, хеш-код всегда будет одинаковым.
  2. Если объекты одинаковые, то и хеш-коды одинаковые (но не наоборот).
  3. Если хеш-коды равны, то входные объекты не всегда равны.
  4. Если хеш-коды разные, то и объекты гарантированно разные.
Выгода от хеширования состоит в том, что оно обеспечивает постоянство время выполнения операций add(), contains(), remove() и size(), даже для больших наборов.
Класс HashSet не гарантирует упорядоченности элементов, поскольку процесс хеширования сам по себе обычно не приводит к созданию отсортированных множеств.

Рассмотрим пример использования класса HashSet:

import java.util.HashSet;
import java.util.Set;

public class HashSetDemo {
    public static void main(String[] args) {
        Set<String> hashSet = new HashSet<>();

        hashSet.add("Харьков");
        hashSet.add("Киев");
        hashSet.add("Львов");
        hashSet.add("Кременчуг");
        hashSet.add("Харьков");

        System.out.println(hashSet);
    }
}
Read also:
Comments