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

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的比较,来判断是否找到该值
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值