Как эффективно использовать объекты Enum в качестве ключей в структуре данных Map? - PullRequest
3 голосов
/ 12 июня 2010

Существует ли более эффективная и специализированная реализация коллекции карт, в которой объекты Enum могут служить в качестве ключей?

Ответы [ 3 ]

18 голосов
/ 13 июня 2010

Да.EnumMap именно это;эффективная реализация интерфейса Map, в котором тип ключа должен быть перечислением:

Из API documentation:

Class EnumMap<K extends Enum<K>,V>

Специализированная реализация Map для использования с ключами типа enum.Все ключи в карте перечисления должны происходить из единственного типа перечисления, который указывается, явно или неявно, при создании карты.Enum карты представлены внутри как массивы.Это представление чрезвычайно компактно и эффективно.

Пример использования:

Map<MyEnum, String> map = new EnumMap<MyEnum, String>(MyEnum.class);
1 голос
/ 02 сентября 2016

Кстати, проще написать:

Map<MyEnum, String> map = new EnumMap<>(MyEnum.class);

Нет необходимости повторять типы.Это может сделать код намного проще для чтения.

0 голосов
/ 12 июня 2010

Я узнал об этом недавно после того, как случайно наткнулся на ответ в Java API.Если у вас когда-либо есть карта, в которой в качестве ключей используются перечисления, убедитесь, что вы используете EnumMap .Это очень просто и намного более эффективно:

public interface LibraryItem{ ... }

public enum LibraryItemType{ BOOK, CD, VHS, AUDIO; ... }

Map<LibraryItemType, NavigableSet<LibraryItem>> itemsByType =
    new EnumMap<>(LibraryItemType.class);
...