binarySearch方法详解——全网最细!!!!!

文章目录

      • 1.binarySearch方法调用的两种方法
          • 1.1 第一种方式
          • 2第二张方式
      • 2.binarySearch的返回值
          • 2.1 返回值
      • 3源码:
      • 总结

1.binarySearch方法调用的两种方法

1.Arrays.binarySearch(ints1,0,5,3);


2.Arrays.binarySearch(ints1,3);

1.1 第一种方式

解释:ints1 是传入的数组名,支持的类型是
所有的数组类型
不论是对象,引用,字符串,还是 字符,
总而言之,只要是数组,就能传入
第二个数字:代表我们要搜索范围的下限下标 ,该下标包括在内
**第三个数字:**代表我们要搜索范围上限的下标,该下标不包括在内,包括该下标-1的下标,我们称为:上限实际下标
**第四个数字:**我们要搜索的,目标

2第二张方式

解释:第二种方式直接全数组搜索,第一个是数组,第二个是目标

2.binarySearch的返回值

2.1 返回值

1.在范围内搜索到该目标:返回目标的数组下标

2.要搜索的目标比搜索范围的数字都大:返回:(上限实际下标+1)的负值

3.要搜索的目标比搜索范围的数字都小,返回:(下限下标+1)的负值

4要搜索的目标在范围内:返回:最后中间值+1的负值

3源码:

private static int binarySearch0(Object[] a, int fromIndex, int toIndex,
                                     Object key) {
        int low = fromIndex;
        int high = toIndex - 1;

        while (low <= high) {
            int mid = (low + high) >>> 1;
            @SuppressWarnings("rawtypes")
            Comparable midVal = (Comparable)a[mid];
            @SuppressWarnings("unchecked")
            int cmp = midVal.compareTo(key);

            if (cmp < 0)
                low = mid + 1;
            else if (cmp > 0)
                high = mid - 1;
            else
                return mid; // key found
        }
        return -(low + 1);  // key not found.
    }

对返回值结果源码的分析:

1.小于任何数字:——————返回的return -(low + 1); 其中low一直不变,所以**(下限下标+1)的负值**
2.大于任何数字:——————最以上限下标不变,low比上限大1,再加1就是实际上限+2
然后返回该负值
3.大小在内部:——————但是没有搜索到:这时候,循环条件一定不成立,low>high
之前的low就和high一样的大小,midlowhigh,其中1,2 条件下最终也是,midlowhigh ,只不过有一个上限或者下限不变,以此好表示
在内部的最后还是返回其-(low + 1)

总结


-------只要找到该值,一定返回的是正数,否则一定返回的是负数,
通过和0的比较,来判断是否找到该值

你可能感兴趣的:(笔记,java,二分法)