欢迎访问宙启技术站
智能推送

如何使用Java中的Arrays类中的binarySearch()函数进行二分查找?

发布时间:2023-05-19 02:31:23

在Java中,Arrays类中的binarySearch()函数用来在一个已经排过序的数组中查找指定元素的索引位置。它的实现采用了二分查找算法,因此又叫做二分查找函数。本篇文章将详细介绍Arrays.binarySearch()函数的使用方法和注意事项。

1. 函数的定义和参数

Arrays类中的binarySearch()函数定义如下:

public static int binarySearch(Object[] arr, Object key)
public static int binarySearch(Object[] arr, int fromIndex, int toIndex, Object key)

个函数接收一个Object类型的数组和一个Object类型的关键字作为参数,在整个数组中查找关键字的索引位置。第二个函数接收三个参数:一个Object类型的数组,一个int类型的开始索引fromIndex和一个int类型的结束索引toIndex,它会在索引范围[fromIndex, toIndex)中查找关键字的索引位置。

关键字在数组中的位置由以下规则决定:

1. 如果关键字存在于数组中,它将返回该元素的索引位置;

2. 如果关键字不存在于数组中,它将返回一个负数值,该负数值表示如果要将关键字插入数组中,应该插入到的位置的索引位置的相反数,即“-插入位置-1”。

2. 函数的使用示例

下面是Arrays.binarySearch()函数的一个使用示例:

import java.util.Arrays;

public class BinarySearchExample {
   public static void main(String[] args) {
      int[] numbers = {1, 2, 7, 8, 10, 12, 15};
      int element = 8;
      int index = Arrays.binarySearch(numbers, element);
      if(index >= 0) {
         System.out.println("Element found at index " + index);
      }
      else {
         System.out.println("Element not found");
      }
   }
}

该程序创建了一个整型数组numbers,并将元素1、2、7、8、10、12和15依次初始化。然后,它调用Arrays.binarySearch()函数,查找数字8在数组中的索引位置。由于数字8在数组中,函数返回索引值3,该程序输出:

Element found at index 3

下面是一个在指定范围内查找元素的使用示例:

import java.util.Arrays;

public class BinarySearchExample2 {
   public static void main(String[] args) {
      int[] numbers = {1, 2, 7, 8, 10, 12, 15};
      int element = 8;
      int index = Arrays.binarySearch(numbers, 1, 5, element);
      if(index >= 0) {
         System.out.println("Element found at index " + index);
      }
      else {
         System.out.println("Element not found");
      }
   }
}

该程序查找数字8在索引范围[1,5)(即从索引位置1开始,到但不包括索引位置5)内的数组中的索引位置。由于数字8在该范围内,函数返回索引值3,该程序输出:

Element found at index 3

3. 注意事项

在使用Arrays.binarySearch()函数时,需要注意以下几点:

1. 该数组必须已经排过序,否则结果是不可预测的;

2. 如果数组中有多个与关键字相等的元素,函数返回其中任何一个元素的索引位置;

3. 由于如果关键字不存在于数组中,函数返回的是一个负数,因此需要根据返回值是否大于等于0来判断查找是否成功;

4. 如果要使用二分查找查找复杂对象,需要实现Comparable接口或者提供一个Comparator对象,以便在比较对象时使用。

总之,Java中的Arrays.binarySearch()函数提供了一种快速、高效的二分查找方法。如果要在一个已经排过序的数组中查找指定元素,不妨考虑使用这个方便实用的函数。