根据文档:
public static <T> int binarySearch(T[] a, T key, Comparator<? super T> c)
使用二分搜索算法在指定数组中搜索指定对象。
在进行此调用之前,必须根据指定的比较器(如通过 sort(T[], Comparator) 方法)对数组进行升序排序。
如果未排序,则结果未定义。如果数组包含多个等于指定对象的元素,则无法保证会找到哪一个。
上面是不是意味着该Arrays.binarySearch
方法只能在Array升序排序时使用?
我测试了它,如下所示
class Unturned {
public static void main(String[] args) {
String[] chars = {"a", "b", "c", "e","f","h","i"};
MySort ms = new MySort();
Arrays.sort(chars, ms);
for(String c : chars ) System.out.print(c + " ");
System.out.println("\n" + Arrays.binarySearch(chars, "d", ms));
}
static class MySort implements Comparator<String> {
public int compare(String a, String b) {
return b.compareTo(a);
} } }
输出:
i h f e c b a
-5
-5 将插入点放在值为 c 的元素上,这是正确的。(即-4-1)。
为什么文档说数组必须按升序排序?