В чем разница между LinkedHashSet и HashSet

«В чем разница между LinkedHashSet и HashSet» — вопрос из категории Алгоритмы и структуры данных, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

LinkedHashSet и HashSet оба реализуют интерфейс Set, но различаются порядком хранения элементов:

  1. HashSet:

    • Не гарантирует порядок элементов.
    • Основан на HashMap.
    • Быстрее для вставки/удаления (O(1)).
  2. LinkedHashSet:

    • Сохраняет порядок вставки элементов.
    • Основан на LinkedHashMap.
    • Немного медленнее из-за поддержки связного списка.

Пример:

val hashSet = HashSet<Int>().apply { 
    add(3); add(1); add(2) 
} // Порядок не гарантирован: [1, 2, 3]

val linkedHashSet = LinkedHashSet<Int>().apply { 
    add(3); add(1); add(2) 
} // Сохранит порядок: [3, 1, 2]

Используйте LinkedHashSet, когда важен порядок вставки, и HashSet для максимальной производительности.