SortedMap.values()返回带有迭代器的集合,迭代器以升序返回值。 我需要一个快速获取方法(通过索引)到这个集合。我的收藏是不可修改的。
我的想法:创建实现List Interface的类,它保持对collection和list的引用以进行迭代。 当我们收到get(int i)时:
1)if(i< = maxI)然后我们从列表中返回值。
2)if(i> maxI)然后我们通过集合迭代到i,并将元素复制到列表值。(仅复制引用)。 我们将O(1)摊销。
是否存在此问题的现有实施或解决方案?
答案 0 :(得分:2)
传统方式是:
new ArrayList<YourType>(theSortedMap.values());
或LinkedList
或其他什么。所有Collection
实现类(Set
,List
等的子类型)都有一个带Collection<? extends E>
的构造函数。这通常被称为&#34; 转换构造函数&#34;。
答案 1 :(得分:0)
如果您希望您需要访问地图中的几乎所有值,那么两者的复杂性几乎相同。我不在乎,只是使用Arrays.asList(map.values())
答案 2 :(得分:0)
如果您的地图无法修改,并且您可以使用Guava等第三方库,那么您可以使用ImmutableSortedMap
然后调用
myImmutableSortedMap.values().asList()
以常量时间返回随机访问视图。这可能比尝试滚动自己的包装器简单得多。