如何通过键值
获取Collections.binarysearch()中的最高和最低索引位置int curIndex = Collections.binarysearch(myList,"String");
int highIndex = ?
答案 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
循环,但是我发现它更具可读性。)