我使用的是TreeSet<Integer>
,我非常想在集合中找到数字的索引。有没有办法很好地利用二进制树的O(log(n))复杂性呢?
(如果没有,那我该怎么办,还有谁知道为什么不这样做?我很好奇,为什么这样的类会包含在Java中而没有类似搜索功能的东西。)
最佳答案
正如@Yrlec指出的,尽管集合中没有此元素,但set.headSet(element).size
将返回0。所以我们最好检查一下:
return set.contains(element)? set.headSet(element).size(): -1;
这是显示问题的测试用例:
public static void main(String args[]){
TreeSet<Integer> set = new TreeSet<>();
set.add(4);
set.add(2);
set.add(3);
set.add(1);
System.out.println(set.headSet(1).size());//0
System.out.println(set.headSet(2).size());//1
System.out.println(set.headSet(3).size());//2
System.out.println(set.headSet(4).size());//3
System.out.println(set.headSet(-1).size());//0!!Caution,returns 0 though it does not exist!
}