我需要一个不允许重复,排序并支持subList(startIndex, endIndex)
方法的集合。是否存在,如果存在,它是什么集合?
TreeMap
没有重复,有排序,但没有subList(index, index)
。 ArrayList
有subList(index, index)
,但它可以包含重复的值。有什么选择吗?
答案 0 :(得分:2)
最引人注目的是SortedSet
。
http://download.oracle.com/javase/6/docs/api/java/util/SortedSet.html
但是,它不允许你sublist(int start, int end)
。您可以subSet(E start, E end)
但是从您的描述中不清楚这是否符合您的需求。如果您需要实际索引的概念,您可能需要某种形式的List
。如果没有重复项是重要的Set
是一个很好的起点。任何Collection
都允许您根据Comparator<E>
进行排序,以便标准不那么重要 - 只需确保在访问之前进行排序。
答案 1 :(得分:2)
我相信你正在寻找一种叫做 order-statistic tree 的东西,这是一个平衡的二元搜索树,增加了额外的信息,所以在O(log n)时间内,你可以查询任何索引处的元素。因为它是一个二叉搜索树,它不允许重复,并且因为你可以在给定位置查询元素,所以你可以有效地实现子范围;只需返回树的新视图,您可以在其中跟踪开始和结束索引,因此在迭代树时,您可以跨越该特定范围。
Java标准库不提供此数据结构的实现(实际上我不知道任何提供它的语言)。我设法找到(在谷歌的缓存上)订单统计树的实现,其中包含两个文件:
希望这有帮助!
答案 2 :(得分:0)
使用indexed-tree-map,你可以这样做:
SortedSet range = indexedTreeSet.subSet(
indexedTreeSet.exact(indexFrom),
indexedTreeSet.exact(indexTo));