番石榴中是否有相应的不可变enumMap?

bra*_*ter 25 java immutability enum-map guava

我最近了解了EnumMap在Java中的优点,并希望将现有的替换ImmutableMap<OccupancyType, BigDecimal>为EnumMap.但是,我也喜欢ImmutableMap提供的不可变属性.

  • 在番石榴中是否有一个变体,ImmutableEnumMap?
  • 在存储方面哪一个(EnumMap与ImmutableMap)表现更好?
  • 我找不到两者的比较.如果有人能指出我的链接或者对两种数据结构的效率有一些见解,我会很感激吗?

Lou*_*man 34

番石榴贡献者在这里.

番石榴目前没有ImmutableEnumMap变种,但如果它有,它可能只是一个包装EnumMap.(也就是说,稍微好一点的不可变实现是可能的.)

EnumMapImmutableMap在任何情况下都会比基本表现更好; 很难或不可能击败.

(我将提交一个问题来调查ImmutableMap为枚举键类型添加变体.)


更新:Guava 14补充道Maps.immutableEnumMap().

  • 更新:`ImmutableEnumMap` [已添加.](http://code.google.com/p/guava-libraries/source/detail?r=835a7397fabb05a764a8008f4151c97f821a29ef) (12认同)

The*_*ist 11

我只是想ImmutableEnumMapGuava 14.0中提供一个示例,因为它是一个包私有类,所以你不能这样做ImmutableEnumMap.of().你必须做Maps.immutableEnumMap().

private final ImmutableMap<MyEnum, String> myEnumMap = Maps.immutableEnumMap(ImmutableMap.of(
        MyEnum.A,   "A",
        MyEnum.B,   "B",
        MyEnum.C,   "C"
        ));
Run Code Online (Sandbox Code Playgroud)

不确定是否有更自然的语法.

  • 在对`Maps.immutableEnumMap`的调用中,您可以使用`ImmutableMap.<MyEnum,String> builder().put(MyEnum.A,"A").build()`向地图添加5个以上的值. (2认同)