【问题标题】:Is it possible to get List Interface for SortedMap.values()?是否可以获得 SortedMap.values() 的列表接口?
【发布时间】:2014-04-09 22:33:06
【问题描述】:

SortedMap.values() 返回带有迭代器的集合,它按升序返回值。 我需要这个集合的快速获取方法(按索引)。我的收藏是不可修改的。

我的想法:创建实现List接口的类,并保持对集合和列表的引用进行迭代。 当我们收到 get(int i):

1) if (i

2) if (i > maxI) 然后我们通过集合迭代到 i,并将元素复制到列表值。(仅复制引用)。 我们将有 O(1) 摊销。

对于这个问题是否有任何现有的实现或解决方案?

【问题讨论】:

  • 你想通过做这一切来达到什么目的?使用索引访问 Map.values() 的元素本身没有任何用途。您没有任何关于第 i 个索引的信息。如果你真的只想随机访问元素 - 然后简单地将值直接复制到列表中。
  • @Bhaskar 这是真的,虽然他们说这是一个 SortedMap,所以也许他们确实有这方面的信息。

标签: java sortedmap


【解决方案1】:

常规的方式是:

new ArrayList<YourType>(theSortedMap.values());

LinkedList 或其他。所有Collection 实现类(所以SetList 等的子类型)都有一个采用Collection&lt;? extends E&gt; 的构造函数。这通常被称为“转换构造函数”。

【讨论】:

    【解决方案2】:

    如果您预计需要访问地图中的几乎每个值,则两者的复杂性几乎相同。我不在乎,只需使用 Arrays.asList(map.values())

    【讨论】:

      【解决方案3】:

      如果你的地图是不可修改的,并且你可以使用第三方库比如Guava,那么你可以使用ImmutableSortedMap然后调用

      myImmutableSortedMap.values().asList()
      

      在恒定时间内返回一个随机访问视图。这可能比尝试推出自己的包装器要简单得多。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-24
        • 2018-04-16
        • 1970-01-01
        • 2010-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多