用Arrays类的binarySearch()方法搜索指定数组,以获取指定对象,该方法返回搜索元素的索引值。binarySearch方法为二分法查找,所以数组必须是有序的或者是用sort()方法排序之后的。
binarySearch()方法有两种参数类型。
(1)binarySearch(Object[] a, Object key)
- a:要搜索的数组
- key:要搜索的值
(2)binarySearch(Object[] a, int fromIndex, int toIndex, Object key)
- a:要搜索的数组
- fromIndex:指定范围的开始处索引(包含)
- toIndex:指定范围的结束处索引(不包含)
- key:要搜索的值
如果key包含在数组(或指定范围)中,则返回搜索值的索引,索引从0开始 ;
否则返回 -1 或 “-“(插入点)。插入点是搜索键将要插入数组(或指定位置)的那一点,即第一个大于此键的元素索引,此时索引从1开始。即:
方法的返回值有以下几种:
1.找到的情况下:如果key在数组中,则返回搜索值的索引。
2.找不到的情况下:
- [1] 搜索值不是数组元素,且在数组范围内,从1开始计数,得“ - 插入点索引值”;
- [2] 搜索值不是数组元素,且大于数组内元素,索引值为 – (length + 1);
- [3] 搜索值不是数组元素,且小于数组内元素,索引值为 –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);
//结果为:x1=-4 x2=2 x3=-1 x4=-7
例子:
import java.util.Arrays;
public class Test {
public static void main(String[] args)
{
int arr[] = new int[] {4,25,17,8,12};
System.out.println("原数组为:");
int i = 0;
for(int x : arr) {
i++;
if(i == arr.length)
System.out.println(x);
else
System.out.print(x + " ");
}
Arrays.sort(arr);
System.out.println("排序后为:");
i = 0;
for(int x : arr) {
i++;
if(i == arr.length)
System.out.println(x);
else
System.out.print(x + " ");
}
int index = Arrays.binarySearch(arr, 8);
System.out.println("关键字8的返回值为:"+index);
index=Arrays.binarySearch(arr, 2);
System.out.println("关键字2的返回值为:"+index);
index=Arrays.binarySearch(arr, 5);
System.out.println("关键字5的返回值为:"+index);
index=Arrays.binarySearch(arr, 27);
System.out.println("关键字27的返回值为:"+index);
System.out.println();
index=Arrays.binarySearch(arr, 0, 2, 8);
System.out.println("关键字8在范围[0,2)的返回值为:"+index);
index=Arrays.binarySearch(arr, 0, 2, 2);
System.out.println("关键字2在范围[0,2)的返回值为:"+index);
index=Arrays.binarySearch(arr, 0, 2, 5);
System.out.println("关键字5在范围[0,2)的返回值为:"+index);
index=Arrays.binarySearch(arr, 0, 2, 12);
System.out.println("关键字12在范围[0,2)的返回值为:"+index);
}
}
运行结果:
关键字“8”在数组中,因此“8”的索引值从0开始数,为1,所以index的值是1。
关键字“5”没有在数组中,故index的值为 “-“(插入点)。第一个大于“5”的元素是“8”,而“8”的索引值从1开始数,为2,所以index的值是-2。