二进制搜索索引位置

时间:2014-02-10 12:14:30

标签: java

如何通过键值

获取Collections.binarysearch()中的最高和最低索引位置
int curIndex = Collections.binarysearch(myList,"String");
int highIndex = ?

1 个答案:

答案 0 :(得分:4)

您已经做出了错误的假设:返回的值将是最低的索引。来自documentation

  

如果列表包含多个与指定对象相等的元素,则无法保证找到哪个元素。

基本上,一旦您找到了一个匹配项,您只需沿着列表向下走,直到找到不匹配项以获得最低索引,然后沿着列表向上走,直到您找到不匹配以获得最高指数。

int found = Collections.binarySearch(myList, "String");
int lowIndex = found;
while (lowIndex > 0 && myList.get(lowIndex - 1).equals("String")) {
    lowIndex--;
}
int highIndex = found;
while (highIndex + 1 < myList.size()
       && myList.get(highIndex + 1).equals("String")) {
    highIndex++;
}

(如果你愿意的话,你可以用while循环重写那些for循环,但是我发现它更具可读性。)