Java的binarySearch问题

为什么2在数组中它返回的是-3

        //int[] arr = {2,1,5,9,4,7,8,6,3};
        System.out.println(Arrays.binarySearch(arr, 2));//-3
        System.out.println(Arrays.binarySearch(arr, 1));//1

二分查找,要求数据是从小到大有序的,你这数据明显不符合要求

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7450576
  • 这篇博客也不错, 你可以看下Java 中的binarySearch方法
  • 除此之外, 这篇博客: Java8的Arrays.binarySearch()及其返回值分析中的 三、基于源码返回值的应用 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 基于上述分析,可以很轻易的在Arrays.binarySearch的基础上得到插入点的下标!

    
    
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class OneCounting {
        public static void main(String[] args) {
            int[] nums = {1, 2, 2, 4, 5, 6};
            Scanner in = new Scanner(System.in);
            while (in.hasNext()) {
                int x = in.nextInt();
                int idx = Arrays.binarySearch(nums, x);
                if (idx >= 0) {
                    System.out.println(x + "在数组中的下标是" + idx);
                } else {
                    int insertionPoint = -(idx + 1);
                    System.out.println(x + "不在数组中,插入点是" + insertionPoint);
                }
            }
    
        }
    }