番石榴中是否有相应的不可变枚举映射?

2022-09-01 12:53:24

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

  • 有没有一个变体,不可变的EnumMap在番石榴中可用?
  • 在存储方面,哪一个(EnumMap与ImmutableMap)表现更好?
  • 我找不到两者的比较。如果有人能给我指出一个链接或对两种数据结构的效率提供一些见解,我将不胜感激?

答案 1

番石榴贡献者在这里。

番石榴目前没有变体,但如果它有,它可能只是一个包装在 .(也就是说,稍微好的不可变实现是可能的。ImmutableEnumMapEnumMap

EnumMap在任何情况下,性能将优于基本;很难或不可能被打败。ImmutableMap

(不过,我将提交一个问题来调查为枚举键类型添加变体。ImmutableMap


更新:Guava 14添加了Maps.immutableEnumMap()


答案 2

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

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

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