Sobes.tech
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]