binarysearch java_Java中Arrays.binarySearch()索引详解

Java中Arrays.binarySearch()索引详解

一、必须要在升序排序后再使用binarySearch(),否则查找会变得花里胡哨,即找不到正确元素下标索引。

下面展示一些 错误示范。

int[] arr = new int[]{10,8,6,5,2,1};

//        Arrays.sort(arr);升序排序

int ans = Arrays.binarySearch(arr,1);

System.out.println(ans);

上述程序运行结果为 ans = -1,但是很明显,1的确存在数组arr中,究其原因是因为binarySearch采用的是二分查找,二分查找的算法要求所要查找的数组是一个已经排好序的数组。

要想得到正确的答案只需要解开注释

int[] arr = new int[]{10,8,6,5,2,1};

//升序排序

Arrays.sort(arr);

int ans = Arrays.binarySearch(arr,1);

System.out.println(ans);

即可得到正确答案ans = 0。

二、binarySearch(Object[] a, Object key)搜索结果分析。

a:要搜索的数组,key:要搜索的值。

利用binarySearch(Object[] a, Object key),搜索时,会出现以下四种情况。

1、在数组中搜索到key值,返回搜索值的索引下标;

2、搜索值key在数组范围内,但不属于数组元素,则从1开始计数,返回“-插入点索引值”;

3、搜索值key小于数组最小元素值,返回“-1”;

4、搜索值key大于数组最大元素,返回“-(length+1)”。

下面举个例子:

int[] arr = new int[]{1,3,5,7,9};

Arrays.sort(arr);

//1、在数组中搜索到key值,返回搜索值的索引下标;

int x1 = Arrays.binarySearch(arr, 5);

//2、搜索值key在数组范围内,但不属于数组元素,则从1开始计数,返回“-插入点索引值”;

int x2 = Arrays.binarySearch(arr, 4);

//3、搜索值key小于数组最小元素值,返回“-1”

int x3 = Arrays.binarySearch(arr, 0);

//4、搜索值key大于数组最大元素,返回“-(length+1)”。

int x4 = Arrays.binarySearch(arr, 10);

结果为x1 = 2; x2 = -3; x3 = -1; x4 = -6。

三、binarySearch(Object[] a, int fromIndex, int toIndex,Object key)搜索结果分析。

a:要搜索的数组,fromIndex:指定范围的开始处索引(包含),toIndex:指定范围的结束处索引(不包含),key:要搜索的值。

利用binarySearch(Object[] a, int fromIndex, int toIndex,Object key),搜索时,也会出现以下四种情况。

1、在规定的搜索范围中搜索到key值,返回搜索值的索引下标;

2、搜索值key在规定的搜索范围内,但不属于数组元素,则从1开始计数,返回“-插入点索引值”;

3、搜索值key小于数组下标为fromIndex的值,返回“-(fromIndex + 1)”;

4、搜索值key大于或等于数组下标为toIndex的值,返回“-(toIndex+1)”。

下面举个例子:

int[] arr = new int[]{1,3,5,7,9};

Arrays.sort(arr);

//1、在规定的搜索范围中搜索到key值,返回搜索值的索引下标;

int x1 = Arrays.binarySearch(arr, 1,3,5);

//2、搜索值key在规定的搜索范围内,但不属于数组元素,则从1开始计数,返回“-插入点索引值”;

int x2 = Arrays.binarySearch(arr, 1,3,4);

//3、搜索值key小于数组下标为fromIndex的值,返回“-(fromIndex + 1)”;

int x3 = Arrays.binarySearch(arr, 1,3,1);

//4、搜索值key大于或等于数组下标为toIndex的值,返回“-(toIndex+1)”。

int x4 = Arrays.binarySearch(arr, 1,3,7);

结果为x1 = 2; x2 = -3; x3 = -2; x4 = -4。

感谢阅读,如有错误,不吝赐教。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值