Arrays API

2021-09-09 10:40:15 浏览数 (2)

copyOf

Arrays类的copyOf(U[] original, int newLength, Class<? extends T[]> newType)方法用于复制指定数组original到新数组,新数组的长度为newLength,新数组元素类型为newType。

  1. 如果新数组的长度大于旧数组,那么多出的那部分用null填充;
  2. 如果新数组的长度小于旧数组,那么少的那部分直接截取掉;
代码语言:javascript复制
Long[] array1 = new Long[]{1L, 2L, 3L};

Object[] array2 = Arrays.copyOf(array1, 5, Object[].class);
System.out.println(Arrays.toString(array2)); // [1, 2, 3, null, null]

Object[] array3 = Arrays.copyOf(array1, 2, Object[].class);
System.out.println(Arrays.toString(array3)); // [1, 2]

asList

解释:Arrays.asList会将数组转化为ArrayList<>。

代码语言:javascript复制
源码:
public static <T> List<T> asList(T... a) {
   return new ArrayList<>(a);
}
代码语言:javascript复制
public class test {
  public static void main(String[] args) {
   
    String[] str = new String[5];
    str[0] = "a";
    str[1] = "b";
    str[2] = "c";
    str[3] = "d";
    str[4] = "e";

    //调用Arrays中的asList方法将String[]转化为一个List<String>
    List<String> list = Arrays.asList(str);
    System.out.println("list:"   list.toString());

    //再为list单独添加元素
    list.add("f");
    list.add("g");
    System.out.println("list:"   list.toString());
  }
}

正常Arrays.asList(str)是没问题的,但是在list.add("f")、list.add("g")的时候出现了UnsupportedOperationException异常。

解释:因为在Arrays.asList的时候,Arrays类是return new ArrayList<>(a)一个内部ArrayList类(成员内部类),这个内部类继承了AbstractList类,因为内部类没有重新父类的add方法,转而在add操作时会调用父类的add方法,而AbstractList在add的时候会抛出UnsupportedOperationException异常。但是由于ArrayList类也集成了AbstractList父类同时也重写了add、remove操作索引不会调用父类的方法,因此不会抛出异常。

代码语言:javascript复制
源码:AbstractList类

public void add(int index, E element) {
   throw new UnsupportedOperationException();
}

public E remove(int index) {
   throw new UnsupportedOperationException();
}
代码语言:javascript复制
方式一:
String[] strArray = new String[2];
ArrayList<String> list = new ArrayList<String>(Arrays.asList(strArray)) ;
list.add("1");
System.out.println(list);

方式二:(最高效)
String[] strArray = new String[2];
ArrayList< String> arrayList = new ArrayList<String>(strArray.length);
Collections.addAll(arrayList, strArray);
arrayList.add("1");
System.out.println(arrayList);

方式三:
List<Integer> intList= Arrays.stream(new int[] { 1, 2, 3, }).boxed().collect(Collectors.toList());
List<Long> longList= Arrays.stream(new long[] { 1, 2, 3 }).boxed().collect(Collectors.toList());
List<Double> doubleList= Arrays.stream(new double[] { 1, 2, 3 }).boxed().collect(Collectors.toList());

String[] arrays = {"tom", "jack", "kate"};
List<String> stringList= Stream.of(arrays).collect(Collectors.toList());

0 人点赞