以下是从执行情况的说明部分EnumMap的Java的文档 :
实现注意事项:所有基本操作都执行在固定时间。 他们很可能(但并不保证)比其HashMap副本更快。
我已经看到了Java文档一个类似线EnumSet
也。 我想知道为什么是它更可能是EnumSets
和EnumMaps
会比他们的同行散列更多更快?
以下是从执行情况的说明部分EnumMap的Java的文档 :
实现注意事项:所有基本操作都执行在固定时间。 他们很可能(但并不保证)比其HashMap副本更快。
我已经看到了Java文档一个类似线EnumSet
也。 我想知道为什么是它更可能是EnumSets
和EnumMaps
会比他们的同行散列更多更快?
EnumSet
由位阵列的支持。 既然你可以把不同的项目数EnumSet
预先知道,我们可以简单地保留每个位对应一个枚举值。 你可以想像类似的优化Set<Byte>
或Set<Short>
,但它不是可行Set<Integer>
(你需要的内存0.5吉布2 ^ 32位)或一般。
因此,基本的操作一样exists
或add
AR固定时间(就像HashSet
),但他们只需要检查或设置一个位。 无hashCode()
计算。 这就是为什么EnumSet
更快。 另外像工会更复杂的操作或使用易位处理技术来实现。
在OpenJDK的有两个实现EnumSet
: RegularEnumSet
能够处理枚举与多达64个值在long
和JumboEnumSet
(使用更大的枚举long[]
但是,这只是一个实现细节。
EnumMap
工作原理类似的原理,但它使用Object[]
来存储值,而键(索引)隐式地从推断Enum.ordinal()