Set
Коллекция без повторов
Set<E> хранит уникальные элементы. Если попытаться добавить значение,
которое множество уже считает равным существующему, второй экземпляр не появится.
Это удобно для идентификаторов, тегов, разрешений и любых других данных, где повтор не несёт нового смысла.
Set<String> tags = new HashSet<>();
System.out.println(tags.add("java")); // true
System.out.println(tags.add("sql")); // true
System.out.println(tags.add("java")); // false
System.out.println(tags.size()); // 2
Метод add() возвращает true, если множество изменилось,
и false, если такой элемент уже был.
Нет индекса — есть принадлежность
У Set нет позиции вроде «элемент номер 3».
Главный вопрос для множества обычно другой: содержится ли конкретное значение?
Для этого используется contains().
Set<String> permissions = Set.of("READ", "WRITE");
if (permissions.contains("WRITE")) {
System.out.println("Can edit");
}
Фабричный метод Set.of(...) создаёт набор, который нельзя изменять после создания.
Он также не допускает повторяющиеся элементы уже в момент создания.
Порядок зависит от реализации
Сам интерфейс Set не обещает конкретный порядок обхода.
Одни реализации вообще не фиксируют его, другие сохраняют порядок добавления или поддерживают сортировку.
Поэтому нельзя полагаться на случайный порядок, который однажды получился при выводе множества.
equals() и
hashCode(). Их связь станет практически заметна, когда мы разберём HashSet.