番石榴中是否有相应的不可变enumMap?
我最近了解了EnumMap在Java中的优点,并希望将现有的ImmutableMap
替换为EnumMap。 但是,我也喜欢ImmutableMap提供的不可变属性。
- 是否有一个变体,在guava中可用的ImmutableEnumMap?
- 在存储方面哪一个(EnumMap与ImmutableMap)表现更好?
- 我找不到两者的比较。 如果有人能指出我的链接或对两个数据结构的效率有一些见解,我会很感激吗?
番石榴贡献者在这里。
Guava目前没有ImmutableEnumMap
变体,但如果它有,它可能只是EnumMap
的包装器。 (也就是说,稍微更好的不可变实现是可能的。)
无论如何, EnumMap
将比基本的ImmutableMap
表现更好; 很难或不可能击败。
(我将提交一个问题来研究为枚举键类型添加ImmutableMap
变体。)
更新:Guava 14添加了Maps.immutableEnumMap()
。
我只是想提供一个示例,现在ImmutableEnumMap
在Guava 14.0中 ,因为它是一个包私有类,所以你不能做ImmutableEnumMap.of()
。 你必须改为使用Maps.immutableEnumMap()
。
private final ImmutableMap myEnumMap = Maps.immutableEnumMap(ImmutableMap.of( MyEnum.A, "A", MyEnum.B, "B", MyEnum.C, "C" ));
不确定是否有更自然的语法。
由于番石榴ImmutableEnumMap在版本14中仍然标记为beta,我建议使用枚举映射的不可修改的视图,然后丢弃对枚举映射的原始引用以确保它是不可变的。
示例(在构造函数中):
Map entries = new EnumMap (SomeEnum.class); ... // (fill in entries) this.entries = Collections.unmodifiableMap(entries);