Arrays.BinarySearch是否要求数组按升序排序

zig*_*ggy 4 java oop string scjp

根据文件:

public static <T> int binarySearch(T[] a, T key, Comparator<? super T> c)        
Run Code Online (Sandbox Code Playgroud)

使用二进制搜索算法在指定的数组中搜索指定的对象.

在进行此调用之前,必须根据指定的比较器(通过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);
} } }
Run Code Online (Sandbox Code Playgroud)

输出:

i h f e c b a
-5
Run Code Online (Sandbox Code Playgroud)

-5将插入点置于具有值c的元素,这是正确的.(即-4-1).
为什么文档说数组必须按升序排序?

Oli*_*rth 5

它说"必须根据指定的比较器按升序排序".粗体部分是关键部分; 你的数组确实是根据指定的比较器排序的(因为你只是对它进行了排序!).