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

本文介绍了Java中的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。

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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值