LinkedHashSet в Java

LinkedHashSet

LinkedHashSet реализует интерфейс Set, расширяет HashSet.

Набор LinkedHashSet не допускает двух одинаковых элементов. Null значения допускаются. Не синхронизирован.

Обеспечивает итерацию в порядке ввода, тогда как HashSet выводит элементы в произвольном порядке.

Скорость работы примерно равна скорости HashSet.

LinkedHashSet надо понимать как множество элементов, среди которых нет повторяющихся. Если нужно убрать из какой-то коллекции повторяющиеся элементы, то можно использовать для этой задачи LinkedHashSet.

Используется LinkedHashSet и для копирования набора типа Set, при этом порядок в копии будет соответствовать порядку в оригинале, независимо от реализации набора Set.

Базовые операции для коллекций – add, remove, contain – выполняются за постоянное время при условии, что не меняется ёмкость множества.

Производительность LinkedHashSet слегка ниже, чем у HashSet, но есть исключение: итерации по набору LinkedHashSet берут время, пропоциональное размеру набора, т.е. size, а итерации по HashSet пропорциональны ёмкости, т.е. capacity.

Создавать объект множества LinkedHashSet для строк рекомендуется так:

Set < String> hs = null;
hs = new LinkedHashSet < String>();

здесь тип hs — Set, а не LinkedHashSet. Можно было использовать и LinkedHashSet, но рекомендуется именно Set, т.к. конструктор может поменяться, например можно использовать HasSet или другое, а объект hs сохраниться.

Создать синхронизированный объект LinkedHashSet:

hs = Collections.synchronizedSet(new LinkedHashSet < String>());

Добавить элемент в LinkedHashSet:

hs.add(new String("Str") + inn.toString());

Добавить коллекцию vect в LinkedHashSet:

Vector < String> vect = null;
vect = new Vector < String>();
vect.add("01");
vect.add("02");
vect.add("03");
boolean resBool = hs.addAll(vect);

При добавлении коллекции vect все дублирующиеся элементы, если таковые найдутся, будут отброшены и в hs добавлены не будут.

Получить размер, т.е. количество элементов:

Integer size = hs.size();

Проверить есть ли элемент «Str2»:

Удалить элемент «Str2»:

boolean get = hs.remove(new String("Str2"));

Удалить все элементы:

hs.clear();

Выясняем, не пуст ли объект LinkedHashSet:

Содержит ли LinkedHashSet все злементы коллекции vect?

boolean resBool = hs.containsAll(vect);

Удаляем из множества все элементы коллекции vect:

boolean resBool = hs.removeAll(vect);

Удаляем из LinkedHashSet все элементы, кроме содержащихся в коллекции vect:

boolean resBool = hs.retainAll(vect);

Добавим элемент null:

hs.add(null);

Вот как удаляем повторяющиеся элементы коллекции. Пусть дан вектор:

здесь элемент "UNO" повторяется дважды. Как сделать коллекцию без повторяющихся элементов? Так:

hs = new LinkedHashSet < String>(doubleVect);

В результирующей коллекции hs будет только один элемент "UNO" и элементы "DOS","TRES","CUATRO". LinkedHashSet автоматически отбрасывает повторы.

Итератор должен быть объявлен внутри synchronized блока:

Получаем LinkedHashSet, Java

такой результат.