java.util.Collections.binarySearch() 方法用于使用二进制文件在指定列表中搜索指定对象搜索算法。在进行此调用之前,必须根据指定的比较器(如通过 sort(List, Comparator) 方法)将列表按升序排序。如果未排序,则结果不确定。如果列表包含多个等于指定对象的元素,则无法保证会找到哪一个。
语法
public static <T> int binarySearch(List<? extends T> list,
T key,
Comparator<? super T> c)
这里,T是列表中元素的类型。
参数
list | 指定要搜索的列表。 |
type | 指定要搜索的键。 |
c | 指定列表排序所依据的比较器。 null 值表示应使用元素的自然排序。 |
返回值
返回搜索键的索引,如果它包含在列表中;否则,(-(插入点) - 1)。插入点定义为将键插入到列表中的点:大于键的第一个元素的索引,或者如果列表中的所有元素都小于指定键,则为 list.size() 。请注意,这保证了当且仅当找到该键时,返回值将为 >= 0。
Exception
抛出 ClassCastException,如果列表包含使用指定比较器无法相互比较的元素,或者搜索关键字无法使用此比较器与列表中的元素相互比较。
示例:
在下面的示例中,java.util.Collections.binarySearch()方法用于在给定列表中搜索给定元素。
import java.util.*;
public class MyClass {
public static void main(String[] args) {
//创建List对象
List<Integer> MyList = new ArrayList<Integer>();
//填充列表
MyList.add(50);
MyList.add(40);
MyList.add(30);
MyList.add(20);
MyList.add(10);
//创建一个用于逆序排序的比较器
Comparator<Integer> comp = Comparator.reverseOrder();
//10 出现在索引 = 4 处(按相反顺序)
int idx1 = Collections.binarySearch(MyList, 10, comp);
System.out.println(idx1);
//45 不在列表中。插入点45
//将为 1(按相反顺序)。因此,返回 (-1-1) = -2
int idx2 = Collections.binarySearch(MyList, 45, comp);
System.out.println(idx2);
}
}
上述代码的输出将是:
4
-2