Java中给数组提供了一个二分法查找数组元素的位置,这个方法从JDK1.6开始,很多人不理解,做了一个总结对比看即可。

binarySearch(Object[], Object key)
方法的object[]参数是要查找的数组,key参数为要查找的key值。

方法的返回值有几种:

1.找到的情况下:如果key在数组中,则返回搜索值的索引,从0开始。
2.找不到的情况下:
 [1] 搜索值不是数组元素,且在数组范围内,从1开始计数,得“ - 插入点索引值”;
 [2] 搜索值是数组元素,从0开始计数,得搜索值的索引值;
 [3] 搜索值不是数组元素,且大于数组内元素,索引值为 – (length + 1);
 [4] 搜索值不是数组元素,且小于数组内元素,索引值为 – 1。

举例:

        int a[] = new int[] { 1, 3, 4, 6, 8, 9 };
        int x1 = Arrays.binarySearch(a, 5);    
        int x2 = Arrays.binarySearch(a, 4);    
        int x3 = Arrays.binarySearch(a, 0);    
        int x4 = Arrays.binarySearch(a, 10);   
        System.out.println("x1:" + x1 + ", x2:" + x2);
        System.out.println("x3:" + x3 + ", x4:" + x4);

打印结果 :

x1:-4, x2:2
x3:-1, x4:-7

binarySearch(Object[], int fromIndex, int toIndex, Object key)
方法的object[]参数是要查找的数组,fromIndex参数是搜索的开始索引(包括),toIndex参数是搜索的结束索引(不包括), key参数为要查找的key值。

方法的返回值有几种:

1.找到的情况下:如果key在数组中,则返回搜索值的索引。
2.找不到的情况下:
 [1] 该搜索键在范围内,但不是数组元素,由1开始计数,得“ - 插入点索引值”;
 [2] 该搜索键在范围内,且是数组元素,由0开始计数,得搜索值的索引值;
 [3] 该搜索键不在范围内,且小于范围(数组)内元素,返回–(fromIndex + 1);
 [4] 该搜索键不在范围内,且大于范围(数组)内元素,返回 –(toIndex + 1)。

举例:

        int a[] = new int[] { 1, 3, 4, 6, 8, 9 };
        int x1 = Arrays.binarySearch(a, 1, 4, 5);  
        int x2 = Arrays.binarySearch(a, 1, 4, 4);  
        int x3 = Arrays.binarySearch(a, 1, 4, 2);  
        int x4 = Arrays.binarySearch(a, 1, 4, 10);  
        System.out.println("x1:" + x1 + ", x2:" + x2);
        System.out.println("x3:" + x3 + ", x4:" + x4);

打印结果:

x1:-4, x2:2
x3:-2, x4:-5