是否可以获得SortedMap.values()的List接口?

时间:2014-04-09 22:33:07

标签: java sortedmap

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

我的想法:创建实现List Interface的类,它保持对collection和list的引用以进行迭代。 当我们收到get(int i)时:

1)if(i< = maxI)然后我们从列表中返回值。

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

是否存在此问题的现有实施或解决方案?

3 个答案:

答案 0 :(得分:2)

传统方式是:

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

LinkedList或其他什么。所有Collection实现类(SetList等的子类型)都有一个带Collection<? extends E>的构造函数。这通常被称为&#34; 转换构造函数&#34;。

答案 1 :(得分:0)

如果您希望您需要访问地图中的几乎所有值,那么两者的复杂性几乎相同。我不在乎,只是使用Arrays.asList(map.values())

答案 2 :(得分:0)

如果您的地图无法修改,并且您可以使用Guava等第三方库,那么您可以使用ImmutableSortedMap然后调用

myImmutableSortedMap.values().asList()

以常量时间返回随机访问视图。这可能比尝试滚动自己的包装器简单得多。