Рубрики
Без рубрики

LinkedHashSet на Java

1. Класс LinkedHashSet Класс LinkedHashSet-это реализация хэш-таблицы и связанного списка интерфейса набора с предсказуемым порядком итераций. Оно

Автор оригинала: Pankaj Kumar.

1. Класс LinkedHashSet

  • Класс LinkedHashSet-это реализация хэш-таблицы и связанного списка интерфейса набора с предсказуемым порядком итераций.
  • Он поддерживает двусвязный список для поддержания порядка элементов.
  • Итератор LinkedHashSet возвращает элементы в том порядке, в котором они были вставлены, поэтому элементы повторяются в порядке вставки.
  • Порядок итераций не изменяется, если элемент повторно вставляется в LinkedHashSet.
  • Это полезно, когда нам нужен набор, который поддерживает порядок вставки для итерации, но не хочет добавлять дополнительные накладные расходы, связанные с набором деревьев.

2. Конструкторы LinkedHashSet

Существует четыре конструктора для создания экземпляра LinkedHashSet.

Конструкторы LinkedHashSet

  1. LinkedHashSet() : создает пустой связанный набор хэшей с начальной емкостью по умолчанию (16) и коэффициентом загрузки (0,75).
  2. LinkedHashSet(int initialCapacity) : создает новый пустой связанный набор хэшей с указанной начальной емкостью и коэффициентом загрузки по умолчанию (0,75). Это вызывает исключение IllegalArgumentException, если начальная емкость меньше 0.
  3. LinkedHashSet(int initialCapacity, коэффициент загрузки с плавающей точкой) : создает пустой LinkedHashSet с заданной начальной емкостью и коэффициентом загрузки. Он создает исключение IllegalArgumentException, если начальная емкость меньше нуля или если коэффициент нагрузки не является положительным.
  4. LinkedHashSet(Коллекция расширяет E> c) : создает новый связанный набор хэшей с теми же элементами, что и в указанной коллекции. Он выдает Исключение NullPointerException , если данная коллекция равна null. расширяет E> c)

3. Пример порядка итераций LinkedHashSet

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

HashSet hs = new HashSet<>();
hs.add("a");
hs.add("i");
hs.add("u");
hs.add("e");
hs.add("o");

System.out.println(hs);
hs.forEach(System.out::println);

LinkedHashSet lhs = new LinkedHashSet<>();
lhs.add("a");
lhs.add("i");
lhs.add("u");
lhs.add("e");
lhs.add("o");

System.out.println(lhs);
lhs.forEach(System.out::println);

Выход:

[a, u, e, i, o]
a
u
e
i
o
[a, i, u, e, o]
a
i
u
e
o

4. Связанный хэш-набор против хэш-набора

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

5. LinkedHashSet против набора деревьев

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

Ссылка : Документы API LinkedHashSet