How to efficiently use Enum objects as keys in the Map data structure?

后端 未结 3 378
慢半拍i
慢半拍i 2021-01-20 05:08

Is there a more efficient and specialized implementation of a Map collection where Enum objects can serve as keys?

相关标签:
3条回答
  • 2021-01-20 05:44

    BTW, it's simpler to write:

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

    There's no need to repeat the types. This can make the code a lot easier to read.

    0 讨论(0)
  • 2021-01-20 05:51

    Yes. EnumMap is precisely that; an efficient implementation of the Map interface, in which the key type must be an enum:

    From the API documentation:

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

    A specialized Map implementation for use with enum type keys. All of the keys in an enum map must come from a single enum type that is specified, explicitly or implicitly, when the map is created. Enum maps are represented internally as arrays. This representation is extremely compact and efficient.

    Example usage:

    Map<MyEnum, String> map = new EnumMap<MyEnum, String>(MyEnum.class);
    
    0 讨论(0)
  • 2021-01-20 06:09

    I learned this recently after I accidentally stumbled upon the answer in the Java API. If you ever have a map that uses enums as keys make sure you use EnumMap. It's very simple and much more efficient:

    public interface LibraryItem{ ... }
    
    public enum LibraryItemType{ BOOK, CD, VHS, AUDIO; ... }
    
    Map<LibraryItemType, NavigableSet<LibraryItem>> itemsByType =
        new EnumMap<>(LibraryItemType.class);
    
    0 讨论(0)
提交回复
热议问题