天天看点

Java数组:使用binarySearch()方法查找数组中的指定元素

查找数组是指从数组中查询指定位置的元素,或者查询某元素在指定数组中的位置。使用 Arrays 类的binarySearch() 方法可以实现数组的查找,该方法可使用二分查法来搜索指定数组,以获得指定对象,该方法返回要搜索元素的索引值。

binarySearch() 方法,常用的重载形式有两种。

(1)第一种形式:

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

    }
           

执行代码,输出结果如下:

Java数组:使用binarySearch()方法查找数组中的指定元素

(2)另一种形式用于在指定范围内查找某一元素

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);//打印

    }
           

运行代码,结果如下

Java数组:使用binarySearch()方法查找数组中的指定元素

ps:实现数组查找的方法有很多,但我认为调用Arrays类的方法是最便捷的一种。