当前位置: 首页 > 面试题库 >

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

韩智敏
2023-03-14
问题内容

枚举可比,这意味着您可以拥有

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

这些具有O(ln N)访问时间。

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

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

我想知道是否有一个原因,枚举集合不可导航(和排序)。即我想念什么吗?


问题答案:

我最好的猜测是,可导航性并未被视为枚举集的主要用例。在实现中,没有什么会阻止可导航性。TreeSet和涵盖了将一组枚举成员的需要与可导航性结合在一起的罕见用例TreeMap



 类似资料:
  • 枚举是可比较的,这意味着您可以 它们的访问时间为O(ln N)。 枚举集合具有O(1)访问时间,但不可导航 我想知道枚举集合不可导航(和排序)的原因是什么。我是不是漏掉了什么?

  • 问题内容: 以下是EnumMap的Java文档的 “ 实现注释” 部分的内容: 实施注意事项:所有基本操作均按固定时间执行。它们可能(尽管不能保证)比其HashMap同行更快。 我在java doc中也看到了类似的内容。我想知道为什么它比散列的同行更有可能而且会更快? 问题答案: 由位数组支持。由于您可以预先输入不同项目的数量,因此我们可以简单地为每个枚举值保留一位。您可以想象对或进行类似的优化,

  • 我最近读了一篇关于的文章。文中写道:“使用EnumMap带来实现特定的好处,这是针对枚举键实现的,简而言之,是专门针对枚举键优化的映射实现。” 它还写到:“枚举是使用数组实现的,常用的操作会产生恒定的时间。因此,如果您想要一个高性能的,可以是枚举数据的合适选择。”

  • 问题内容: 我最近了解了Java中EnumMap的好处,并希望将现有的替换为EnumMap。但是,我也想要ImmutableMap提供的不可变属性。 番石榴中有可用的ImmutableEnumMap变体吗? 在存储方面,哪个(EnumMap与ImmutableMap)的性能更好? 我找不到两者的比较。如果有人可以将我指向某个链接或对这两种数据结构的效率提供一些见解,我将不胜感激? 问题答案: 番石

  • 问题内容: 我在雄猫服务器(+ liferay)上收到此异常 我的课是这样的: 我在行上收到此异常, 当队列已满但大小为2 ^ 31时,可能会发生此错误,并且我确定没有那么多命令在等待。 一开始一切都稳定,但在我重新部署战争后,一切开始发生。此类不是战争的一部分,而是放在tomcat / lib中的jar中。 您是否知道为什么会发生这种情况以及如何解决? 问题答案: 从ThreadPoolExec

  • 问题内容: 我在控制台上收到此JavaScript错误: Uncaught SyntaxError: Unexpected token ILLEGAL 这是我的代码: 如您所见,它非常简单。它怎么会引起语法错误? 问题答案: 错误 当JavaScript解释器解析代码时,它会分成称为“令牌”的部分。当令牌不能分类为四种基本令牌类型之一时,在大多数实现中它将被标记为“ILLEGAL”,并且会引发此错