Arrays工具类详解

简述

  Arrays 是JDK提供的操作数组的工具类,array类提供许多操作数组的静态方法。

Arrays.toStirng()

  Arrays.toString()方法可以把数组内各元素值拼接为字符串

int[] arr1 = {1,2,3,4,5};
System.out.println(Arrays.toString(arr1));

拷贝数组  

  数组除了用clone方法拷贝,还可以用Arrays工具类的copyOf()和copyOfRange()进行拷贝。

  copyOf()第一个参数为要拷贝的数组,第二个参数为新数组的长度

int[] arr1 = {1,2,3,4,5};
int[] arr2 = Arrays.copyOf(arr1, 10);
System.out.println(Arrays.toString(arr2));

   copyOfRange(x,l,r)意味将数组x的[l,r)区间拷贝出来

int[] arr1 = {1,2,3,4,5};
int[] arr2 = Arrays.copyOfRange(arr1, 1,3);
System.out.println(Arrays.toString(arr2));

排序

  Arrays.sort(arr);方法会将数组进行升序排序

int[] arr1 = {6,3,2,1,5};
Arrays.sort(arr1);
System.out.println(Arrays.toString(arr1));

  如果要进行自定义排序,如果数组内元素类型是对象,则需要实现Comparable接口并重写compareTo方法。

  该方法的返回值是 int 。如果返回值为正数,则表示当前对象(调用该方法的对象)比 obj 对象“大”,放在右边。反之“小”,放在左边。如果为零的话,则表示两对象相等。

  如果是基本类型,则只能为升序,若要降序或者其他自定义规则排序,我们不能重写compareTo方法因为我们不能动JDK里的类,则需要在第二个参数传一个Comparator类用于设定比较规则。

  例如我们要安装绝对值大小进行升序排序,同理返回负数代表t1在左边,正数代表t1在右边

Integer[] arr = {-6,-4,3,7,2};
Arrays.sort(arr,new Comparator<>(){
    @Override
    public int compare(Integer t1, Integer t2) {
        if(Math.abs(t1) < Math.abs(t2)) return -1;
        return 1;
    }
});
System.out.println(Arrays.toString(arr));

比较数组

  数组的equals并没有进行重写,所以比较的是地址值

  Arrays提供equals静态方法用于比较两数组内元素值是否一致

Integer[] arr1 = {-6,-4,3,7,2};
Integer[] arr2 = {-6,-4,3,7,2};
System.out.println(arr1.equals(arr2));
System.out.println(Arrays.equals(arr1, arr2));

 二分查找

  int binarySearch(Array[] array, int fromIndex, int toIndex, data key),参数2和3可以省略

  在array数组内在[fromIndex,toIndex)下标内查询key,若找到则返回key在数组中的索引值

Integer[] arr1 = {1,2,3,4,5};
int i = Arrays.binarySearch(arr1,2);
System.out.println(i);

   若没找到则返回-(插入位置的索引+1)

Integer[] arr1 = {1,3,3,4,5};
int i = Arrays.binarySearch(arr1,2);
System.out.println(i);

 

 

 

 

 

posted @ 2021-07-26 09:46  艾尔夏尔-Layton  阅读(149)  评论(0编辑  收藏  举报