Автор оригинала: Pankaj Kumar.
1. Класс LinkedHashSet
- Класс LinkedHashSet-это реализация хэш-таблицы и связанного списка интерфейса набора с предсказуемым порядком итераций.
- Он поддерживает двусвязный список для поддержания порядка элементов.
- Итератор LinkedHashSet возвращает элементы в том порядке, в котором они были вставлены, поэтому элементы повторяются в порядке вставки.
- Порядок итераций не изменяется, если элемент повторно вставляется в LinkedHashSet.
- Это полезно, когда нам нужен набор, который поддерживает порядок вставки для итерации, но не хочет добавлять дополнительные накладные расходы, связанные с набором деревьев.
2. Конструкторы LinkedHashSet
Существует четыре конструктора для создания экземпляра LinkedHashSet.
Конструкторы LinkedHashSet
- LinkedHashSet() : создает пустой связанный набор хэшей с начальной емкостью по умолчанию (16) и коэффициентом загрузки (0,75).
- LinkedHashSet(int initialCapacity) : создает новый пустой связанный набор хэшей с указанной начальной емкостью и коэффициентом загрузки по умолчанию (0,75). Это вызывает исключение IllegalArgumentException, если начальная емкость меньше 0.
- LinkedHashSet(int initialCapacity, коэффициент загрузки с плавающей точкой) : создает пустой LinkedHashSet с заданной начальной емкостью и коэффициентом загрузки. Он создает исключение IllegalArgumentException, если начальная емкость меньше нуля или если коэффициент нагрузки не является положительным.
- LinkedHashSet(Коллекция расширяет E> c) : создает новый связанный набор хэшей с теми же элементами, что и в указанной коллекции. Он выдает Исключение NullPointerException , если данная коллекция равна null. расширяет E> c)
3. Пример порядка итераций LinkedHashSet
Простой пример, показывающий, что итератор LinkedHashSet возвращает элементы в порядке вставки. То же самое не относится к хэш-набору.
HashSeths = 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