当前位置: 首页 > 知识库问答 >
问题:

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

我想知道枚举集合不可导航(和排序)的原因是什么。我是不是漏掉了什么?

共有1个答案

司寇善
2023-03-14

我的最佳猜测是,导航性并不被视为枚举集的主要用例。实现中没有阻止导航性的东西。TreeSetTreeMap涵盖了将对一组枚举成员的需要与可导航性相结合的罕见用例。

 类似资料:
  • 问题内容: 枚举可比,这意味着您可以拥有 这些具有O(ln N)访问时间。 枚举集合具有O(1)访问时间,但不可导航 我想知道是否有一个原因,枚举集合不可导航(和排序)。即我想念什么吗? 问题答案: 我最好的猜测是,可导航性并未被视为枚举集的主要用例。在实现中,没有什么会阻止可导航性。和涵盖了将一组枚举成员的需要与可导航性结合在一起的罕见用例。

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

  • 问题内容: 和之间有什么区别? 是什么导致它们被抛出?如何解决? 在修改现有代码以包含新的jar文件时,我经常遇到这些throwables。我在客户端和服务器端都通过Webstart分发了一个Java应用程序。 我遇到的可能原因: 代码客户端未包含的软件包 我们正在使用的新jar缺少运行时类路径 版本与先前的jar冲突 今天,当我遇到这些问题时,我会采取一种犯错的方法来使事情正常进行。我需要更多的

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

  • 问题内容: 和之间有什么区别? 是什么导致它们被抛出?如何解决? 在修改现有代码以包含新的jar文件时,我经常遇到这些throwables。我在客户端和服务器端都通过Webstart分发了一个Java应用程序。 我遇到的可能原因: build.xml代码客户端未包含的软件包 我们正在使用的新jar缺少运行时类路径 版本与先前的jar冲突 今天,当我遇到这些问题时,我会采取一种犯错的方法来使事情正常

  • 当然在文件结束或输入错误发生时返回,但这是否意味着没有更多的数据可用? 使用