是否有番石榴相应的不可变EnumMap的?(Is there a corresponding imm

2019-06-25 20:44发布

我最近了解到EnumMap的在Java的好处,并想取代现有的ImmutableMap<OccupancyType, BigDecimal>到EnumMap的。 不过,我也想通过ImmutableMap提供的一成不变的财产。

  • 是否有一个变体,ImmutableEnumMap番石榴可用?
  • 在存储哪一个(EnumMap的VS ImmutableMap)执行更好的条件?
  • 我找不到两者的比较。 我会很感激,如果有人可以点我一个链接,或者提供的两个数据结构的效率一些见解?

Answer 1:

番石榴贡献者这里。

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

EnumMap会比基本表现更好ImmutableMap ,在任何情况下; 这是很难或不可能被击败。

(我将文件中的问题进行调查添加ImmutableMap ,枚举密钥类型变种,虽然)。


更新:番石榴14将Maps.immutableEnumMap()



Answer 2:

我只是想提供一个例子,现在ImmutableEnumMap是番石榴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"
        ));

不知道是否有一个更自然的语法。



Answer 3:

由于番石榴ImmutableEnumMap仍然标记beta版的14版,我建议使用一个枚举映射的不可修改视图,然后扔掉原来的参考枚举映射,以确保它是不可改变的。

实施例(在构造函数):

Map entries = new EnumMap <SomeEnum, T>(SomeEnum.class);
... // (fill in entries)
this.entries = Collections.unmodifiableMap(entries);


文章来源: Is there a corresponding immutable enumMap in guava?