如何在TreeSet中查找元素的等级

时间:2010-11-06 17:59:20

标签: java treeset

我知道你可以找到树集中的第一个和最后一个元素。如果我想知道没有迭代的第二个或第三个元素是什么怎么办?或者,更优选的是,给定一个元素,找出它在树集中的排名。

由于

编辑:我认为你可以使用tailset来做,即。将原始集的大小与尾部的大小进行比较。尾部效率如何?

3 个答案:

答案 0 :(得分:2)

TreeSet未提供有效的排名方法。我怀疑(你可以通过查看它的来源确认)TreeSet甚至没有维护任何额外的信息位(即每个节点的左右子树上的元素计数),这些信息需要执行这样的查询在O(log(n))时间。因此,似乎没有任何快速方法可以找到TreeSet元素的等级。

如果你真的需要它,你可以用一个平衡的二进制搜索树实现你自己的SortedSet,它允许这样的查询或修改TreeSet实现来创建一个新的实现,它被扩充到允许这样的查询。有关如何实际完成此操作的更多详细信息,请参阅有关在CLRS中扩充数据结构的章节。

答案 1 :(得分:1)

除了迭代器之外别无他法。

编辑:

试试这个:

treeSet.higher(treeSet.first());

这应该在TreeSet上给出第二个元素。我不确定这是否比使用Iterator更优化。

答案 2 :(得分:1)

根据Sun JDK6实现的来源,tailSet(E).size()遍历尾部集并计算元素,因此该调用为O(尾部集大小)。