【问题标题】:Is there a Scala equivalent of EnumSet/EnumMap?是否有等效于 EnumSet/EnumMap 的 Scala?
【发布时间】:2012-11-06 03:41:50
【问题描述】:

在 Java 中,我们有两个不错的类:EnumSet 用于 enums 的集合,EnumMap 用于其键为 enums 的映射。 EnumSet 表示为一个 64 位字(或 64 位字数组),EnumMap 表示为一个值数组,两者都由enums 的序数索引。所以插入/查找/删除/...操作只需要 O(1) 时间。

我们在 Scala 中是否有类似的东西 - 可变或不可变?

我发现BitSet(可变和不可变)对整数进行操作,所以我假设有一组Enumeration.Values 支持它的有效实现。但是我只找到了Enumeration.ValueSet,也就是backed up by SortedSet[Int]。虽然这还不错,但BitSet 似乎更有效地实现了这一目的。

我没有找到任何使用Enumeration.Value 作为类似于EnumMap 的键的地图优化实现。

【问题讨论】:

  • 与 Java enums 不同,Scala 的 Enumeration 值可以具有任意数字标识符,这就是为什么我怀疑 Scala 中的 Java EnumSetEnumMap 没有直接等效项。跨度>
  • @ghik 虽然这是真的,但我想说这个功能很少使用。当有人为值分配大数字时,他有责任简单地使用不同的 Set/Map 实现。
  • @ghik 实际上这是 2.10 impl 中的错误来源。

标签: scala enums set scala-collections


【解决方案1】:

实际上,在 2.10 Enumeration.ValueSet 中使用了 BitSet。

class ValueSet private[ValueSet] (private[this] var nnIds: immutable.BitSet)

That would be here.

【讨论】:

  • 是否还有EnumMap 等价物?
猜你喜欢
  • 2020-10-26
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 2011-02-19
相关资源
最近更新 更多