Arrays.binarySearch()返回值问题

今天在学习过程中发现Arrays类中的binarySearch方法在未找到目标值时的返回值是不确定的,通过查找资料总结出以下规则:
1、如果找到关键字,则返回值为关键字在数组中的位置索引,且索引从0开始。
2、如果没有找到关键字,返回值为负的插入点值,所谓插入点值就是第一个比关键字大的元素在数组中的位置索引,而且这个位置索引从1开始。

import java.util.Arrays;

public class Arraydemo1 {
    public static void main (String [] args){
        //定义一个int型的数组
        int []arr ={8,1,2,5,4,9};

        System.out.println("toString:"+Arrays.toString(arr));
        //调用Arrays的排序方法
        Arrays.sort(arr);
        System.out.println("toString:"+Arrays.toString(arr));
        System.out.println("--------------------------------");
        System.out.println("binarySearch:"+Arrays.binarySearch(arr, 8));//4
        System.out.println("binarySearch:"+Arrays.binarySearch(arr, 26));//-7
        System.out.println("binarySearch:"+Arrays.binarySearch(arr, 6));//-5
        System.out.println("binarySearch:"+Arrays.binarySearch(arr, 0));//-1
    }

}

结果:
排序前:[8, 1, 2, 5, 4, 9]
排序后:[1, 2, 4, 5, 8, 9]

关键字8的返回值是:4
关键字26的返回值是:-7
关键字6的返回值是:-5
关键字0的返回值是:-1

分析:
当我们查找的关键字是8在该数组中,则返回的结果是该数组排好序之后的下标4;(找到关键字索引从0开始)
接着我们查找关键字26,我们发现这个关键字并不在该数组中,并且26比数组中的所有元素都大,所以返回值是数组length+1,也就是6+1=7;(没有找到关键字索引从1开始)
接着我们查找关键字6,由于排好序的数组中第一个大于6的数是8所以返回值就是8所在的索引5; (没有找到关键字索引从1开始)
接着我们查找关键字0,由于在该数组中比0稍大的数是1,则返回1的索引1;(没有找到关键字索引从1开始)

之所以计算插入点值时索引要从1开始算,是因为-0=0,如果从0开始算,那么上面例子中关键字2和关键字4的返回值就一样了。 ```


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值