数组查询

Arrays类的binarySearch()方法,可使用二分搜索法来搜索指定数 组,以获得指定对象。该方法返回要搜索元素的索引值。binarySearch() 方法提供了多种重载形式,用于满足各种类型数组的查找需要。 binarySearch()方法有两种参数类型。

(1)binarySearch(Object[],Object key)

语法如下:

binarySearch(Object[] a,Object key)
  • a:要搜索的数组。
  • key:要搜索的值。

如果key包含在数组中,则返回搜索值的索引;否则返回-1 或“-”(插入点)。插入点是搜索键将要插入数组的那一点,即第一个 大于此键的元素索引。

【例】查询数组元素,实例代码如下:

查询数组元素

上面的代码中变量index的值是元素“8”在数组arr中索引在0~1内的 索引位置。由于在指定的范围内并不存在元素“8”,index的值是“-”(插 入点)。如果对数组进行排序,元素“8”应该在“25”的前面,因此插入 点应是元素“25”的索引值2,所以index的值是-2。

如果数组中的所有元素都小于指定的键,则为a.length(注意,这保 证了当且仅当此键被找到时,返回的值将大于等于0)。

注意:必须在进行此调用之前对数组进行排序(通过sort()方法)。如果 没有对数组进行排序,则结果是不确定的。如果数组包含多个带有指定值的元素,则无法保证找到的是哪一个。

【例】在项目中创建类Reference,在主方法中创建一维数组 ia,实现查找元素4在数组ia中的索引位置。

import java.util.*;

public class Example { // 创建类
	public static void main(String[] args) { // 主方法
		int ia[] = new int[] { 1, 8, 9, 4, 5 }; // 定义int型数组ia
		Arrays.sort(ia); // 将数组进行排序
		int index = Arrays.binarySearch(ia, 4); // 查找数组ia中元素4的索引位置
		System.out.println("4的索引位置是:" + index); // 将索引输出
	}
}
 运行结果如图所示
运行结果如图所示

说明:返回值“1”是对数组ia进行排序后元素4的索引位置。

(2)binarySearch(Object[],int fromIndex,int toIndex,Object key)

该方法在指定的范围内检索某一元素。 语法如下:

binarySearch(Object[] a,int fromIndex,int toIndex,Object key)
  • a:要进行检索的数组。
  • fromIndex:指定范围的开始处索引(包含)。
  • toIndex:指定范围的结束处索引(不包含)。
  • key:要搜索的元素。

在使用该方法之前同样要对数组进行排序,来获得准确的索引值。如果要搜索的元素key在指定的范围内,则返回搜索键的索引;否则返回-1或“-”(插入点)。如果范围中的所有元素都小于指定的键,则为toIndex(注意,这保证了当且仅当此键被找到时,返回的值将大于等于 0)。

注意:如果指定的范围大于或等于数组的长度,则会报出 ArrayIndexOutOfBoundsException异常。

【例】在项目中创建类Rakel,在主方法中创建String数组,实 现查找元素“cd”在指定范围的数组str中的索引位置。

import java.util.*;

public class Rakel { // 创建类
	public static void main(String[] args) { // 主方法
		// 定义String型数组str
		String str[] = new String[] { "ab", "cd", "ef", "yz" };
		Arrays.sort(str); // 将数组进行排序
		// 在指定的范围内搜索元素"cd"的索引位置
		int index = Arrays.binarySearch(str, 0, 2, "cd");
		System.out.println("cd的索引位置是:" + index); // 将索引输出
	}
}
 运行结果如图所示
运行结果如图所示

发表评论