我最近了解到EnumMap的在Java的好处,并想取代现有的ImmutableMap<OccupancyType, BigDecimal>
到EnumMap的。 不过,我也想通过ImmutableMap提供的一成不变的财产。
- 是否有一个变体,ImmutableEnumMap番石榴可用?
- 在存储哪一个(EnumMap的VS ImmutableMap)执行更好的条件?
- 我找不到两者的比较。 我会很感激,如果有人可以点我一个链接,或者提供的两个数据结构的效率一些见解?
我最近了解到EnumMap的在Java的好处,并想取代现有的ImmutableMap<OccupancyType, BigDecimal>
到EnumMap的。 不过,我也想通过ImmutableMap提供的一成不变的财产。
番石榴贡献者这里。
番石榴目前还没有一个ImmutableEnumMap
变种,但如果它没有,它很可能只是围绕一个包装EnumMap
。 (也就是说,稍微好一点的不可改变的实现是可能的。)
EnumMap
会比基本表现更好ImmutableMap
,在任何情况下; 这是很难或不可能被击败。
(我将文件中的问题进行调查添加ImmutableMap
,枚举密钥类型变种,虽然)。
更新:番石榴14将Maps.immutableEnumMap()
我只是想提供一个例子,现在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"
));
不知道是否有一个更自然的语法。
由于番石榴ImmutableEnumMap仍然标记beta版的14版,我建议使用一个枚举映射的不可修改视图,然后扔掉原来的参考枚举映射,以确保它是不可改变的。
实施例(在构造函数):
Map entries = new EnumMap <SomeEnum, T>(SomeEnum.class);
... // (fill in entries)
this.entries = Collections.unmodifiableMap(entries);