2014-04-09 45 views
0

SortedMap.values()使用迭代器返回集合,迭代器按升序返回值。 我需要一个快速get方法(按索引)到这个集合。我的收藏是不可修改的。是否有可能获得SortedMap.values()的列表接口?

我的想法:创建类,实现列表接口,并保持参考集合和列表迭代。当我们收到get(int i)时:

1)if(i < = maxI)然后我们返回列表中的值。 2)if(i> maxI)然后我们通过集合迭代到i,并将元素复制到列表值(仅复制引用)。 我们将有O(1)分期付款。

是否有任何现有的实现或解决方案?

+0

通过这样做你想达到什么目的?使用索引访问Map.values()的元素本身没有任何用途。你没有任何关于第i个索引处的信息。如果你真的只想随机访问元素 - 那么简单地直接将值复制到列表中。 – Bhaskar

+0

@Bhaskar确实如此,虽然他们说它是一个SortedMap,所以也许他们有这方面的信息。 – Radiodef

回答

2

的传统方法是:

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

或者LinkedList或什么的。所有的Collection实现类(所以Set,List等亚型)有一个构造函数,需要一个Collection<? extends E>。这通常被称为“转换构造函数”。

0

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

0

如果你的映射是不可修改的,你可以使用第三方的库,例如Guava,那么你可以使用一个ImmutableSortedMap,然后调用

myImmutableSortedMap.values().asList() 

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

相关问题