查找数组是指从数组中查询指定位置的元素,或者查询某元素在指定数组中的位置。使用 Arrays 类的binarySearch() 方法可以实现数组的查找,该方法可使用二分查法来搜索指定数组,以获得指定对象,该方法返回要搜索元素的索引值。
binarySearch() 方法,常用的重载形式有两种。
(1)第一种形式:
binarySearch(Object[] a,Object key)
a表示要搜索的数组,key表示要搜索的元素,如果key在数组中,就返回key的索引,否则返回-1或“-插入点”。插入点指搜索键将要插入数组的位置,即第一个大于此键的元素索引
注意:在使用binarySearch方法进行数组查询之前,必须先对数组进行排序,可以使用sort()方法排序,如果没有排序则输出的结果是不确定的,如果查找的是多个带有指定值的元素则无法确定是哪一个
例1
public static void main(String[] args) {
int[] a = {1,56,156,421,159,131,132};//声明创建一个int类型的a数组
Arrays.sort(a);//调用Arrays类的sort()方法进行排序
System.out.println(Arrays.toString(a));
//在排序好后的数组中查找元素421和156并存在结果x1和x2中
int x1 =Arrays.binarySearch(a,421);
int x2 =Arrays.binarySearch(a,156);
System.out.println("查找到421的位置为:"+x1);//输出x1
System.out.println("查找到156的位置为:"+x2);//输出x2
}
执行代码,输出结果如下:
(2)另一种形式用于在指定范围内查找某一元素
binarySearch(Object[] a,int fromIndex,int toIndex,Object key);
a表示要搜索的数组,fromIndex指定范围的开始处索引(包含开始处),toIndex指定范围的结束处索引(不包含结束处),key表示要搜索的元素。
在使用这种元素时也需要对数组先排序,如果key在数组中,就返回key的索引,否则返回-1或“-插入点”。插入点指搜索键将要插入数组的位置,即第一个大于此键的元素索引
例2
对例1中创建的a数组查找元素132和156,指定开始的位置分别为2和6,结束的位置分别为1和5
public static void main(String[] args) {
int[] a = {1,56,156,421,159,131,132};
Arrays.sort(a);//排序
System.out.println(Arrays.toString(a));
int x1 =Arrays.binarySearch(a,2,6,132);//开始位置为2,结束位置为6
int x2 =Arrays.binarySearch(a,1,5,156);//开始位置为1,结束位置为5
System.out.println("查找到132的位置为:"+x1);
System.out.println("查找到156的位置为:"+x2);//打印
}