Arrays方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arrays方法相关的知识,希望对你有一定的参考价值。

Arrays方法

Arrays里面包括了一系列静态方法,用于管理和操作数组

  1. toString方法

    Array.toString(arr);
    
  2. sort排序(自然排序和定制排序)

int []arr=1,2,4,1,5,1;
Arrays.sort(arr);//默认是从大到小的
//可以通过Compare接口来定制排序
Arrays.sort(arr,new Compare()
    @Override
    public int compare(Integer o1,Integer o2)
        int i1=(int)01;
         int i2=(int)02;
        return i1-i2;(通过比较两个数字的大小来决定是否要换位置)
    
)

  1. copyOf 数组元素的复制
//1.从arr中复制arr.length个数字给newArr;
Integer[]newArr=Arrays.copyOf(arr,arr.length);
//2.如果长度小于0,则会抛出异常
  1. fill数组填充
   int []nums=1,23,111,44;
        Arrays.fill(nums,33);
        System.out.println(Arrays.toString(nums));

就是将nums数组的元素,都变成33

  1. equals比较两个数组的元素内容是否完全一致
  int []nums2=1,23,111,44;
  int []nums1=1,23,111,44;
        boolean b=Arrays.equals(nums,nums2);
  1. asList 将一组数组,转换成list
List asList =Arrays.asList(1,23,111,44);
asList的运行类型为

Java-Arrays类-Arrays.asList()方法详解

此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。

Arrays.asList() 是将数组作为列表来查看的方法,值得注意的是:

public class Test {
    
    public static void main(String[] args) {
        
        int[] a = new int[]{1,2,3,4,5,6,7,8};
        List list1 = Arrays.asList(a);
        System.out.println(list1.size());  //1
    
        Integer[] b = new Integer[] {1,2,3,4,5,6,8};
        List list2 = Arrays.asList(b);
        System.out.println(list2.size());  //7
        
    }
}

期望的输出是 list里面也有7个元素,也就是size为7,然而结果是1。说明编译器对Integer[] 处理不一样。Integer是可变长参数。传入过程中asList()方法实际是将Integer数组里的元素进行存储。

 

原因:在Arrays.asList中,该方法接受一个变长参数,一般可看做数组参数,但是因为int[] 本身就是一个类型,所以a变量作为参数传递时,编译器认为只传了一个变量,这个变量的类型是int数组,所以size为1,相当于是List中数组的个数。基本类型是不能作为泛型的参数,按道理应该使用包装类型,但这里缺没有报错,因为数组是可以泛型化的,所以转换后在list中就有一个类型为int的数组 ,返回一个受指定数组支持的固定大小的列表。           

 

方法源代码:

 @SafeVarargs
    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

 最后提醒,如果Integer[]数组没有赋值的话,默认是null,而不是像int[]数组默认是0。

public class Test2 {
    
    public static void main(String[] args) {
        Week[] weeks  = {Week.sun,Week.mon,Week.tue,Week.wed,Week.thu,Week.fri};
        List list = Arrays.asList(weeks);
        list.add(Week.sat);
        System.out.println(list.size());
    }

}

enum Week{
    sun,mon,tue,wed,thu,fri,sat
}
注意这里用add会出错,因为是arrays.aslist中,看代码可以看到这里返回的ArrayList不是原来的传统意义上的java.util.arraylist了,而是自己工具类的一个静态私有内部类,并没有提供add方法,要自己实现,
所以这里是出错了,因此,除非确信array.aslist后长度不会增加,否则谨慎使用:List abc=Arrays.asList("a","b","c"),因为这样的长度是无法再add的了.

 

                                               


以上是关于Arrays方法的主要内容,如果未能解决你的问题,请参考以下文章

Arrays类常用方法

Arrays类--Arrays.asList()方法使用

Arrays常用方法

Arrays.asList方法遇到的问题

Java中的Arrays类

Java中的Arrays类