使用二分法查找数组中某一项值所在索引位置。

Arrays.binarySearch(Object[] a,Object key);

Arrays.binarySearch(Object[] a, fromIndex, toIndex,Object key);

1、从整个数组中查询指定值的索引:Arrays.binarySearch(被查数组,查询值);

2、从指定索引之间查询指定值的索引:Arrays.binarySearch(被查数组,开始索引,结束索引,查询值);

指定索引时,查询的范围包含“开始索引”的值,不包含“结束索引”的值。

注意:

1、查找之前必须先对数组进行排序。可以使用java.util.Arrays类提供的:

Arrays.parallelSort(a)或者 Arrays.sort(a)代表正序排序。(查看如何排序)

2、Arrays.binarySearch(被查数组,查询值); 查询内容的索引范围是整个数组,索引:0 ~数组.length-1。

Arrays.binarySearch(被查数组,开始索引,结束索引,查询值);查询内容的索引范围是:开始索引~结束索引-1 。

3、如果查询值在数组中有重复值,则查询结果显示前边的值的所在索引位置。

提示:比如数组有俩个2,返回排序后前边那个2索引位置。

4、如果所查的数组有要查询的值,则返回该内容排序后新的索引位置,若未找到返回负数。

示例:

@Test

public void test3(){

Integer[] arr = {-1,-2,1,2,2,9,8,7,-3,0};

/**先排序,Arrays.parallelSort(a) 或者 Arrays.sort(a) 代表正序排序。*/

//Arrays.parallelSort(arr);

Arrays.sort(arr);

//例1、查询数组arr,2 排序后(正序)所在的索引位置。

int search = Arrays.binarySearch(arr,2);

//例2、查询数组arr,5 排序后(正序)所在的索引位置。注意:5 在该数组中是不存在的。

int search2 = Arrays.binarySearch(arr,5);

//例3、从指定索引位置查询,从索引2-6之间查询内容 2 。注意:2的索引值<=查询索引值<6的索引值

int search3 = Arrays.binarySearch(arr,2,6,2);

System.out.println("正序:"+Arrays.toString(arr));//打印数组,正序:[-3, -2, -1, 0, 1, 2, 2, 7, 8, 9]

System.out.println("排序后的索引位置:"+search);//查询2,排序后的索引位置:5

System.out.println("排序后的索引位置:"+search2);//查询5,排序后的索引位置:-8,注意:当在数组中未找到要查找的内容 返回负数。

System.out.println("排序后的索引位置:"+search3);//查询2,排序后的索引位置:5

}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐