是否有一个集合提供排序,没有重复的元素,以及subList(索引,索引)方法?

时间:2011-08-24 18:14:53

标签: java sorting data-structures

我需要一个不允许重复,排序并支持subList(startIndex, endIndex)方法的集合。是否存在,如果存在,它是什么集合?

TreeMap没有重复,有排序,但没有subList(index, index)ArrayListsubList(index, index),但它可以包含重复的值。有什么选择吗?

3 个答案:

答案 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));