为什么 Arrays.binarySearch(arr, "b") 的输出是 -1。请说清楚

dhS*_*dhS -2 java arrays

import java.util.Arrays;
import java.util.Comparator;

public class MainClass {
    public static void main(String args[]) {

        String[] arr = { "c", "d", "b", "a", "e" };

        InnerClass in = new InnerClass();
        Arrays.sort(arr, in);

        for (String str : arr) {
            System.out.print(str + " ");
        }
        System.out.println(Arrays.binarySearch(arr, "b"));
    }

    static class InnerClass implements Comparator<String> {

        public int compare(String s1, String s2) {
            return s2.compareTo(s1);

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出 edcba -1

有关信息,如果我们将Arrays.binarySearch(arr, "b")替换 为 Arrays.binarySearch(arr, "e"),则输出为 Output edcba -6

And*_*ner 5

您的数组未排序。

binarySearch 仅适用于排序数组:

在进行此调用之前,必须根据其元素的自然顺序(如 sort(Object[]) 方法)将数组按升序排序。如果未排序,则结果未定义。

  • @dhS 如果未排序,结果为*未定义*。有时(即对于某些包含“b”的未排序数组)它可能是-1,有时可能只是碰巧找到结果。 (3认同)
  • @Paul 不,它是未定义的。它表示它将返回插入点*假设它已排序*。它没有说明如果数组未排序它将返回什么。事实上,它的字面意思是“如果没有排序,结果是未定义的”。 (2认同)
  • @dhS我猜测为什么返回-6,但知道“为什么”不会帮助你做任何你想做的事情。根据 API 的要求,在调用“binarySearch”之前对数组进行排序。 (2认同)