根据文档显示:
使用二分查找算法在指定的数组中搜索指定的对象。 在进行此调用之前,根据指定的比较器(例如通过 sort(T[],Comparator) 方法),必须按升序对数组进行排序。 如果未排序,则结果是未定义的。 如果数组包含多个等于指定对象的元素,则不能保证找到哪一个。
public static <T> int binarySearch(T[] a, T key, Comparator<? super T> c)
使用二分查找算法在指定的数组中搜索指定的对象。 在进行此调用之前,根据指定的比较器(例如通过 sort(T[],Comparator) 方法),必须按升序对数组进行排序。 如果未排序,则结果是未定义的。 如果数组包含多个等于指定对象的元素,则不能保证找到哪一个。
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)。
为什么文档说数组必须按升序排序?