Arrays.binarySearch() 产生的返回值 Arrays 的部分数组工具类
首先介绍Arrays 数组工具类,用来方便的去操作数组
- 成员方法
public static String toString(int[] a) //打印数组元素
public static void sort(int[] a)//数组排序,默认为由小到大排序
public static int binarySearch(int[] a,int key)//二分查找
- 样例输入:
223 11 879 13 23 12 34 12 45 23
从以下代码中我们不难看出,数组arr在排序前后,它的地址值没有发生变化;
可见,数组在排序后,又将排序后的值放在了原数组中,并且原数组的地址是不发生改变的
导包:
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
代码:
public class Demo2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入要排序的几个数");
Integer[] arr=new Integer[10];
for(int i=0;i<arr.length;i++){
arr[i]=sc.nextInt();
}
System.out.println(arr);//[Ljava.lang.Integer;@6e0be858
Arrays.sort(arr);
System.out.println(arr);//[Ljava.lang.Integer;@6e0be858
String str=Arrays.toString(arr);
System.out.println(str);//由小到大的排序
//[11, 12, 12, 13, 23, 23, 34, 45, 223, 879]
int i= Arrays.binarySearch(arr,12);//数组中有此数值
System.out.println("i:"+i);//1
int j=Arrays.binarySearch(arr,6);//数组中没有此数值
System.out.println("j:"+j);//-1
int n=Arrays.binarySearch(arr,223);//数组中有此数值
System.out.println("n:"+n);//8
int m=Arrays.binarySearch(arr,45);//数组中有此数值
System.out.println("m:"+m);//7
Arrays.sort(arr,new Comparator<Integer>(){
public int compare(Integer a,Integer b){
return -(a-b);
}
});
System.out.println(arr);//[Ljava.lang.Integer;@6e0be858
String string=Arrays.toString(arr);
System.out.println(string);//[879, 223, 45, 34, 23, 23, 13, 12, 12, 11]
System.out.println(arr);//[Ljava.lang.Integer;@6e0be858
int x= Arrays.binarySearch(arr,12);//数组中有此数值
System.out.println("x:"+x);//-1
int y=Arrays.binarySearch(arr,6);//数组中没有此数值
System.out.println("y:"+y);//-1
int z=Arrays.binarySearch(arr,223);//数组中有此数值
System.out.println("z:"+z);//-11
int q=Arrays.binarySearch(arr,45);//数组中有此数值
System.out.println("q:"+q);//-11
int p=Arrays.binarySearch(arr,11);//数组中有此数值
System.out.println("p:"+p);//-1
在做习题过程中,我发现 public static int binarySearch(int[] a,int key)//二分查找 仅适用于从小到大的查找。
针对返回值为负值,我查看了一下API,但似乎并没有很确切的回答。
如果它包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。
插入点 被定义为将键插入数组的那一点:即第一个大于此键的元素索引,
如果数组中的所有元素都小于指定的键,则为 a.length。
注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。
可能是自己对插入点不太了解吧。。。如果谁懂,求指教。
日常鸡汤:我就是我的神,在我活的地方。。。
上一篇: Two Sum - Greater than target
下一篇: java实现输入输出流代码分享