2012-11-17 72 views
11

在Java中,我們有兩個很好的類:EnumSet爲套enum S和EnumMap一個映射,其關鍵字是enum秒。 EnumSet被表示爲64位字(或64位字的陣列)和EnumMap作爲值的陣列,既可通過​​enum S上的序數索引。因此,插入/查找/刪除/ ...操作只需要O(1)時間。有沒有與EnumSet/EnumMap等價的Scala?

我們有在Scala中類似的東西 - 可變或不變?

我發現BitSet(都是可變的和不可變的),它使用整數運算,所以我假設將會有一組Enumeration的高效實現。 Value由它備份。但我發現只有Enumeration.ValueSet,這是backed up by SortedSet[Int]。儘管這並沒有那麼糟糕,但BitSet似乎對此更有效。

我沒有找到任何Enumeration.Value優化的實施地圖類似於EnumMap鍵。

+1

與Java'enum's,Scala的'Enumeration'值可以有任意的數字標識符,這就是爲什麼我懷疑有沒有直接等同於Java的'EnumSet'和'EnumMap'在斯卡拉。 – ghik

+0

@ghik雖然這是真的,我會說這個功能很少使用。當有人將大數字分配給值時,僅僅使用不同的「Set」/「Map」實現是他的責任。 –

+0

@ghik事實上,這是2.10 impl中錯誤的來源。 –

回答

5

事實上,在2.10 Enumeration.ValueSet使用的BitSet。

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

That would be here.

+4

還有一個'EnumMap'等價嗎? –