Java binarySearch()方法:查询数组中的元素
在 Java 程序中,借助 Arrays 类的 binarySearch() 方法,可使用二分搜索法来搜索指定数组,以获得指定对象,该方法返回要搜索元素的索引值。
binarySearch()方法提供了多种重载形式,用于满足各种类型数组的查找需要。binarySearch()方法有两种参数类型。
如果 key 被包含在数组中,则返回搜索值的索引;否则返回 -1 或“-”(插入点)。
【实例】查找元素在数组中的索引位置。
在项目中创建 Reference 类,在主方法中创建一维数组 ia,实现查找元素 4 在数组 ia 中的索引位置。实例代码如下:
在使用该方法前,同样要对数组进行排序,这样才能获得准确的索引值。
如果要搜索的元素 key 在指定的范围内,则返回搜索键的索引;否则返回 -1 或“-”(插入点)。如果范围中的所有元素都小于指定的键,则插入点为 toIndex(注意,这保证了当且仅当此键被找到时,返回的值将大于或等于0)。
在项目中创建 Rakel 类,在主方法中创建 String 数组,实现在指定范围内查找元素“cd”在数组 str 中的索引位置。实例代码如下:
binarySearch()方法提供了多种重载形式,用于满足各种类型数组的查找需要。binarySearch()方法有两种参数类型。
1、binarySearch()的第一种用法
binarySearch() 的语法格式如下:binarySearch(Object[] a, Object key)
- a:要搜索的数组;
- key:要搜索的值。
如果 key 被包含在数组中,则返回搜索值的索引;否则返回 -1 或“-”(插入点)。
注意,调用 binarySearch(Object[] a, Object key) 之前必须对数组进行排序(通过 sort() 方法)。如果没有对数组进行排序,则结果是不确定的。如果数组包含多个带有指定值的元素,则无法保证找到的是哪一个。插入点是搜索键将要被插入数组中的那一点,即第一个大于此键的元素索引。
【实例】查找元素在数组中的索引位置。
在项目中创建 Reference 类,在主方法中创建一维数组 ia,实现查找元素 4 在数组 ia 中的索引位置。实例代码如下:
import java.util.Arrays; // 导入 java.util.Arrays 类 public class Reference { // 创建类 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); // 对索引进行输出 } }运行结果如下:
4 的索引位置是:1
返回值“1”是对数组 ia 进行排序后元素 4 的索引位置。2、binarySearch()的第二种用法
binarySearch() 的语法格式如下: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.Arrays; // 导入 java.util.Arrays 类 public class Rakel { // 创建类 public static void main(String[] args) { // 主方法 String str[] = new String[]{"ab", "cd", "ef", "yz"}; // 定义 String 型数组 str Arrays.sort(str); // 对数组进行排序 int index = Arrays.binarySearch(str, 0, 2, "cd"); // 在指定范围内搜索元素 “cd” 的索引位置 System.out.println("cd 的索引位置是:" + index); // 对索引进行输出 } }运行结果如下:
cd的索引位置是:1