欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Arrays.binarySearch() 产生的返回值 Arrays 的部分数组工具类

程序员文章站 2024-03-06 23:32:44
...

首先介绍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。

可能是自己对插入点不太了解吧。。。如果谁懂,求指教。

日常鸡汤:我就是我的神,在我活的地方。。。

相关标签: java Arrays