为什么一个EnumSet或EnumMap的很可能是比他们的同行散列更好的性能?(Why an Enu

2019-07-18 18:40发布

以下是从执行情况说明部分EnumMap的Java的文档 :

实现注意事项:所有基本操作都执行在固定时间。 他们很可能(但并不保证)比其HashMap副本更快。

我已经看到了Java文档一个类似线EnumSet也。 我想知道为什么是它更可能是EnumSetsEnumMaps会比他们的同行散列更多更快?

Answer 1:

EnumSet由位阵列的支持。 既然你可以把不同的项目数EnumSet预先知道,我们可以简单地保留每个位对应一个枚举值。 你可以想像类似的优化Set<Byte>Set<Short> ,但它不是可行Set<Integer> (你需要的内存0.5吉布2 ^ 32位)或一般。

因此,基本的操作一样existsadd AR固定时间(就像HashSet ),但他们只需要检查或设置一个位。 无hashCode()计算。 这就是为什么EnumSet更快。 另外像工会更复杂的操作或使用易位处理技术来实现。

在OpenJDK的有两个实现EnumSetRegularEnumSet能够处理枚举与多达64个值在longJumboEnumSet (使用更大的枚举long[] 但是,这只是一个实现细节。

EnumMap工作原理类似的原理,但它使用Object[]来存储值,而键(索引)隐式地从推断Enum.ordinal()



文章来源: Why an EnumSet or an EnumMap is likely to be more performant than their hashed counterparts?