Collections 2. Set Flashcards
Set<E></E>
Коллекция, которая не допускает дубликатов,
может хранить их в неупорядоченном виде,
позволяет хранить null (кроме TreeSet), но только один раз
классы которые реализуют Set
= HashSet
Неупорядоченный
= LinkedHashSet
Сохраняет порядок вставки
= TreeSet
Хранит элементы отсортированными
= EnumSet
Предназначен только для enum. Отсортирован. Сложность O(1)
= CopyOnWriteArraySet
Используется для многозадачности и параллельного доступа
HashSet
Неупорядоченный, быстрый
Сложность операций среднем O(1), но в худшем случае O(n), если есть много коллизий.
Использует HashMap под капотом для хранения данных.
Ключ (key) — это сам элемент множества
Значение (value) — это заглушка
Проверяет уникальность элементов с использованием hashCode() и equals(),
LinkedHashSet
Сохраняет порядок элементов, соответствующий порядку их добавления.
Сложность операций среднем O(1).
Использует LinkedHashMap под капотом.
В каждом элементе LinkedHashSet есть дополнительные ссылки (next/prev) для поддержания порядка вставки.
Структура LinkedHashSet = HashSet + двусвязный список
TreeSet
Хранит элементы в отсортированном порядке.
Основан на красно-черном дереве.
Сложность операций O(log n).
Все элементы автоматически сортируются в порядке, определенном их естественным порядком (с помощью метода compareTo()), либо с помощью предоставленного компаратора (Comparator).
Не допускает null
CopyOnWriteArraySet
Используется для многозадачности и параллельного доступа.
Использует массив для хранения своих элементов, и при любом изменении коллекции выполняется копирование всего массива.
Сложность операций:
- чтения О(1)
- записи O(n)