在Java中,我们有两个不错的类:EnumSet
用于enum
的集合EnumMap
和enum
用于密钥为EnumSet
s的映射。 EnumMap
表示为64位字(或64位字的数组),enum
表示为值数组,均由Value
s的序数索引。因此,insert / lookup / remove / ...操作只需 O(1)时间。
我们在Scala中有类似的东西 - 可变还是不可变?
我发现BitSet(都是可变的和不可变的)对整数进行操作,所以我假设有一个Enumeration
的集合的有效实现。Enumeration.ValueSet
由它支持。但我发现只有BitSet
,即backed up by SortedSet[Int]。虽然情况并非如此糟糕,但Enumeration.Value
似乎更有效率。
我没有找到任何使用EnumMap
的地图的优化实施作为与{{1}}类似的键。
答案 0 :(得分:5)
实际上,在2.10中Enumeration.ValueSet使用BitSet。
class ValueSet private[ValueSet] (private[this] var nnIds: immutable.BitSet)