是否有任何原因EnumMap和EnumSet不可导航

Pet*_*rey 34 java collections enums

Enum是可比较的,这意味着你可以拥有

NavigableSet<AccessMode> modes = new TreeSet<>();
NavigableMap<AccessMode, Object> modeMap = new TreeMap<>();
Run Code Online (Sandbox Code Playgroud)

它们具有O(ln N)个访问时间.

Enum集合具有O(1)访问时间,但不可导航

NavigableSet<AccessMode> modes = EnumSet.noneOf(AccessMode.class); // doesn't compile
NavigableMap<AccessMode, Object> modeMap = new EnumMap<>(AccessMode.class);  // doesn't compile
Run Code Online (Sandbox Code Playgroud)

我想知道Enum集合是否不可导航(和排序)是有原因的.我错过了什么?

Luk*_*der 39

JDK及其各种API缺少许多"明显"的功能.为什么忽略/遗忘这个特殊功能?我们只能猜测.但是你的问题长期以来一直是Sun/Oracle的RFE:

您可以通过评论来支持这些RFE.请注意,这是Joshua Bloch关于这个主题的权威答案:

我模糊地回忆起考虑它,但我不记得我们是否有充分理由明确拒绝它.当我实现EnumSet和EnumMap时,我们的运行时间很短,而且时间可能在我们的决策中起作用

http://comments.gmane.org/gmane.comp.java.jsr.166-concurrency/2158

所以即使不得不猜测:-)


Mar*_*nik 9

我最好的猜测是导航性不被视为枚举集的主要用例.实现中没有任何内容会阻止可导航性.将一组enum成员的需求与可导航性结合起来的罕见用例由TreeSetand和TreeMap.