Mediumenum
Что такое EnumMap и EnumSet?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
EnumMap<K extends Enum<K>, V> — Map с enum-ключами: внутри массив значений, индекс = ordinal(). EnumSet — Set для enum: внутри bit vector (long[]). Все операции O(1), очень экономная память.
enum Color { RED, GREEN, BLUE }
Map<Color, String> m = new EnumMap<>(Color.class);
m.put(Color.RED, "warm");
EnumSet<Color> warm = EnumSet.of(Color.RED);
EnumSet<Color> all = EnumSet.allOf(Color.class);
EnumSet<Color> range = EnumSet.range(Color.RED, Color.GREEN);
EnumSet<Color> complement = EnumSet.complementOf(warm);- Не нужно
hashCode/equals(ordinal уникален); - Итерация в natural ordering (declaration order);
- Производительность — в разы лучше
HashMap/HashSet; - Если ключи — enum, всегда
EnumMap/EnumSet; - Не synchronized —
Collections.synchronizedMap/Setwrapper.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.