Back to questions
Junior — Middle
127
Можете объяснить отличие между HashSet, LinkedHashSet и TreeSet в Java?
Companies where asked
Grotem
Answer from AI
sobes.tech AI
В Java HashSet, LinkedHashSet и TreeSet — это реализации интерфейса Set, но они отличаются по внутреннему устройству и поведению:
- HashSet: основан на хеш-таблице. Не гарантирует порядок элементов. Быстрый доступ (в среднем O(1)).
- LinkedHashSet: расширяет HashSet, но сохраняет порядок вставки элементов благодаря связному списку внутри. Идеален, если нужен порядок добавления.
- TreeSet: основан на красно-чёрном дереве (структура данных для сортировки). Хранит элементы в отсортированном порядке (по естественному порядку или компаратору). Операции медленнее (O(log n)).
Пример:
Set<String> hashSet = new HashSet<>();
Set<String> linkedHashSet = new LinkedHashSet<>();
Set<String> treeSet = new TreeSet<>();
hashSet.add("banana");
hashSet.add("apple");
hashSet.add("orange");
linkedHashSet.add("banana");
linkedHashSet.add("apple");
linkedHashSet.add("orange");
treeSet.add("banana");
treeSet.add("apple");
treeSet.add("orange");
System.out.println(hashSet); // Порядок не определён
System.out.println(linkedHashSet); // [banana, apple, orange]
System.out.println(treeSet); // [apple, banana, orange]