LinkedHashSet
LinkedHashSet реализует интерфейс Set, расширяет HashSet.
Набор LinkedHashSet не допускает двух одинаковых элементов. Null значения допускаются. Не синхронизирован.
Обеспечивает итерацию в порядке ввода, тогда как HashSet выводит элементы в произвольном порядке.
Скорость работы примерно равна скорости HashSet.
LinkedHashSet надо понимать как множество элементов, среди которых нет повторяющихся. Если нужно убрать из какой-то коллекции повторяющиеся элементы, то можно использовать для этой задачи LinkedHashSet.
Используется LinkedHashSet и для копирования набора типа Set, при этом порядок в копии будет соответствовать порядку в оригинале, независимо от реализации набора Set.
Базовые операции для коллекций – add, remove, contain – выполняются за постоянное время при условии, что не меняется ёмкость множества.
Производительность LinkedHashSet слегка ниже, чем у HashSet, но есть исключение: итерации по набору LinkedHashSet берут время, пропоциональное размеру набора, т.е. size, а итерации по HashSet пропорциональны ёмкости, т.е. capacity.
Создавать объект множества LinkedHashSet для строк рекомендуется так:
hs = new LinkedHashSet < String>();
здесь тип hs — Set, а не LinkedHashSet. Можно было использовать и LinkedHashSet, но рекомендуется именно Set, т.к. конструктор может поменяться, например можно использовать HasSet или другое, а объект hs сохраниться.
Создать синхронизированный объект LinkedHashSet:
Добавить элемент в LinkedHashSet:
Добавить коллекцию vect в LinkedHashSet:
vect = new Vector < String>();
vect.add(«01»);
vect.add(«02»);
vect.add(«03»);
boolean resBool = hs.addAll(vect);
При добавлении коллекции vect все дублирующиеся элементы, если таковые найдутся, будут отброшены и в hs добавлены не будут.
Получить размер, т.е. количество элементов:
Проверить есть ли элемент «Str2»:
Удалить элемент «Str2»:
Удалить все элементы:
Выясняем, не пуст ли объект LinkedHashSet:
Содержит ли LinkedHashSet все злементы коллекции vect?
Удаляем из множества все элементы коллекции vect:
Удаляем из LinkedHashSet все элементы, кроме содержащихся в коллекции vect:
Добавим элемент null:
Вот как удаляем повторяющиеся элементы коллекции. Пусть дан вектор:
здесь элемент «UNO» повторяется дважды. Как сделать коллекцию без повторяющихся элементов? Так:
В результирующей коллекции hs будет только один элемент «UNO» и элементы «DOS»,»TRES»,»CUATRO». LinkedHashSet автоматически отбрасывает повторы.
Итератор должен быть объявлен внутри synchronized блока:
Получаем
такой результат.