Выбор ответа Senior Коллекции изнутри обновлено

EnumMap и IdentityHashMap

Вопрос

Ключи карты это константы enum Status. Какую реализацию лучше взять?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: EnumMap: массив по ordinal(), без хеширования. EnumMap хранит значения в массиве, индекс это ordinal() константы: O(1) без вычисления хеша и коллизий, компактно, обход в порядке объявления.

Варианты ответа

  1. HashMap: остальные реализации медленнее на любых ключах
  2. IdentityHashMap: константы enum сравниваются по ссылке
  3. EnumMap: массив по ordinal(), без хешированияправильный ответ
  4. TreeMap: только он сохраняет порядок объявления констант

Разбор

EnumMap хранит значения в массиве, индекс это ordinal() константы: O(1) без вычисления хеша и коллизий, компактно, обход в порядке объявления. HashMap работает, но тратит память на узлы. IdentityHashMap предназначен для случаев, когда нужно именно сравнение по ссылке (графы объектов, сериализация), для enum выгоды нет. TreeMap тоже даст порядок, но за O(log n). Для множеств есть аналог EnumSet на битовой маске.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме