SBP-Program

получайте знания здесь

f

tw

in

HashSet в Java

HashSet

HashSet реализует интерфейс Set.

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

Не синхронизирован. Элементы хранятся неупорядоченно.

Производительность HashSet выше, чем у LinkedHasSet и TreeSet.

HashSet надо понимать как множество неупорядоченных элементов, среди которых нет повторяющихся.

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

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

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

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

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

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

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

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

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

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

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();

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

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

boolean resBool = hs.containsAll(vect);

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

boolean resBool = hs.removeAll(vect);

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

boolean resBool = hs.retainAll(vect);

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

hs.add(null);

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

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

hs = new HashSet < String>(doubleVect);

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

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

Получаем HashSet, Java

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