Ответ
LinkedHashSet<E> — это реализация интерфейса Set, которая:
- Гарантирует уникальность элементов (как
HashSet). - Сохраняет порядок вставки элементов (как
LinkedList).
Внутреннее устройство:
LinkedHashSet наследуется от HashSet и внутри использует HashMap для хранения элементов. Однако он дополняет его двусвязным списком, который проходит через все записи и поддерживает порядок их добавления.
Пример и сравнение:
Set<String> hashSet = new HashSet<>();
Set<String> linkedHashSet = new LinkedHashSet<>();
for (String s : Arrays.asList("B", "A", "D", "C", "A")) {
hashSet.add(s);
linkedHashSet.add(s);
}
System.out.println("HashSet: " + hashSet); // Порядок непредсказуем, например [A, B, C, D]
System.out.println("LinkedHashSet:" + linkedHashSet); // Гарантированно [B, A, D, C]
Производительность:
- Немного медленнее
HashSetиз-за накладных расходов на поддержание связного списка. - Быстрее
TreeSetдля операций добавления и поиска, так как не требует поддержания порядка сортировки.
Использование: Выбирайте LinkedHashSet, когда вам нужен Set (уникальные элементы), но при этом важен порядок, в котором вы их добавляли (например, для кэширования с политикой FIFO).