java - 有什么原因 EnumMap 和 EnumSet 不可导航

标签 java collections enums

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

NavigableSet<AccessMode> modes = new TreeSet<>();
NavigableMap<AccessMode, Object> modeMap = new TreeMap<>();

这些有 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

我想知道是否存在枚举集合不可导航(和排序)的原因。即我错过了什么吗?

最佳答案

JDK 及其各种 API 中缺少许多“明显”的功能。为什么忽略/忘记了这个特定功能?我们只能猜测。但是您的问题在 Sun/Oracle 很长时间以来一直是 RFE:

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

I vaguely recall considering it, but I can't recall whether we explicitly rejected it with good reason. We were running very low on time when I implemented EnumSet and EnumMap, and it's possible that time played a role in our decision

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

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

关于java - 有什么原因 EnumMap 和 EnumSet 不可导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34367506/

相关文章:

java - ArrayAdapter.addAll(T... items) 未被 eclipse 标记

java - Hibernate:在有序列表中删除后插入

java - 从枚举字段获取值

java - 为什么 compareTo 在 Java 中的 Enum final 上?

java - Android 上的 Crosswalk 和 Adob​​e SDK 编译

java - 连接重置 - Java(底层套接字状态保持已建立)Azure VM

java - 如何找到数组中最大的数

ios - 比较集合中的元素并通过检查属性删除

python - 计算行日期之前 x 天的出现次数

c++ - C++ 中的模板和预处理