赞
踩
用Arrays类的binarySearch()方法搜索指定数组,以获取指定对象,该方法返回搜索元素的索引值。binarySearch方法为二分法查找,所以数组必须是有序的或者是用sort()方法排序之后的。
binarySearch()方法有两种参数类型。
binarySearch(Object[] a, Object key)
binarySearch(Object[] a, int fromIndex, int toIndex, Object key)
如果key包含在数组(或指定范围)中,则返回搜索值的索引,索引从0开始 ;
否则返回 -1 或 “-“(插入点)。插入点是搜索键将要插入数组(或指定位置)的那一点,即第一个大于此键的元素索引,此时索引从1开始。即:
方法的返回值有以下几种:
1.找到的情况下:如果key在数组中,则返回搜索值的索引。
2.找不到的情况下:
- [1] 搜索值不是数组元素,且在数组范围内,从1开始计数,得“ - 插入点索引值”;
- [2] 搜索值不是数组元素,且大于数组内元素,索引值为 – (length + 1);
- [3] 搜索值不是数组元素,且小于数组内元素,索引值为 –1。
例如:
int a[] = new int[] {1, 3, 4, 6, 8, 9};
int x1 = Arrays.binarySearch(a, 5);
int x2 = Arrays.binarySearch(a, 4);
int x3 = Arrays.binarySearch(a, 0);
int x4 = Arrays.binarySearch(a, 10);
//结果为:x1=-4 x2=2 x3=-1 x4=-7
例子:
import java.util.Arrays; public class Test { public static void main(String[] args) { int arr[] = new int[] {4,25,17,8,12}; System.out.println("原数组为:"); int i = 0; for(int x : arr) { i++; if(i == arr.length) System.out.println(x); else System.out.print(x + " "); } Arrays.sort(arr); System.out.println("排序后为:"); i = 0; for(int x : arr) { i++; if(i == arr.length) System.out.println(x); else System.out.print(x + " "); } int index = Arrays.binarySearch(arr, 8); System.out.println("关键字8的返回值为:"+index); index=Arrays.binarySearch(arr, 2); System.out.println("关键字2的返回值为:"+index); index=Arrays.binarySearch(arr, 5); System.out.println("关键字5的返回值为:"+index); index=Arrays.binarySearch(arr, 27); System.out.println("关键字27的返回值为:"+index); System.out.println(); index=Arrays.binarySearch(arr, 0, 2, 8); System.out.println("关键字8在范围[0,2)的返回值为:"+index); index=Arrays.binarySearch(arr, 0, 2, 2); System.out.println("关键字2在范围[0,2)的返回值为:"+index); index=Arrays.binarySearch(arr, 0, 2, 5); System.out.println("关键字5在范围[0,2)的返回值为:"+index); index=Arrays.binarySearch(arr, 0, 2, 12); System.out.println("关键字12在范围[0,2)的返回值为:"+index); } }
运行结果:
关键字“8”在数组中,因此“8”的索引值从0开始数,为1,所以index的值是1。
关键字“5”没有在数组中,故index的值为 “-“(插入点)。第一个大于“5”的元素是“8”,而“8”的索引值从1开始数,为2,所以index的值是-2。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。