Arrays类的copyOf(U[] original, int newLength, Class<? extends T[]> newType)
方法用于复制指定数组original到新数组,新数组的长度为newLength,新数组元素类型为newType。
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]
解释:Arrays.asList会将数组转化为ArrayList<>。
源码:
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
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操作索引不会调用父类的方法,因此不会抛出异常。
源码:AbstractList类
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
public E remove(int index) {
throw new UnsupportedOperationException();
}
方式一:
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());
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。