Ответ
Для сохранения порядка добавления элементов используется LinkedHashSet.
Как это работает:
LinkedHashSet расширяет HashSet, сохраняя все его преимущества (время доступа ~O(1)), но внутри поддерживает двусвязный список, который фиксирует порядок вставки элементов.
Пример использования:
Set<String> orderedSet = new LinkedHashSet<>();
orderedSet.add("first");
orderedSet.add("second");
orderedSet.add("third");
orderedSet.add("first"); // Дубликат игнорируется
// Порядок вывода гарантирован: first, second, third
for (String item : orderedSet) {
System.out.println(item);
}
Ключевые особенности:
- Гарантирует порядок вставки (не путать с сортировкой).
- Время выполнения операций
add(),contains(),remove()— в среднем O(1). - Потребляет немного больше памяти, чем
HashSet, из-за поддержания связного списка. - Не допускает дубликатов, как и любой
Set.
Когда использовать: Когда нужна коллекция без дубликатов, но при этом важен порядок, в котором элементы были добавлены (например, для реализации кэша с вытеснением по принципу FIFO).