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

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

Guess you like

Origin blog.csdn.net/UncleBlain/article/details/108693079