Arrays.asList作用
把数组转换为集合,便于对数据进行操作
Arrays.asList的两个注意事项
1、参数必须是对象或者对象数组
Arrays.asList()的参数必须是对象或者对象数组,
错误做法:使用基础类型
int[] it = {1,2,3};
List<int[]> ints = Arrays.asList(it);
System.out.println(ints);
输出为[[I@59f95c5d]
正确做法:使用int的包装类Integer
Integer[] it = {1,2,3};
List<Integer> ints = Arrays.asList(it);
System.out.println(ints);
输出为[1, 2, 3]
2、返回值不是java.util.ArrayList而是java.util.Arrays的内部类
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
/**
* @serial include
*/
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
{
private static final long serialVersionUID = -2764017481108945198L;
private final E[] a;
ArrayList(E[] array) {
a = Objects.requireNonNull(array);
}
注意两个地方
第一点是内部类ArraysList,第二点是a数组被final修饰,返回了ArrayList这个内部类,因此用Arrays.asList()将数组转换成list集合,获得的List是不能动态修改的,否则报错 java.lang.UnsupportedOperationException
错误的做法:
Integer[] it = {1,2,3};
List<Integer> ints = Arrays.asList(it);
ints.add(2);
System.out.println(ints);
解决办法:新建一个真正的List
比如:
Integer[] it = {1,2,3};
List<Integer> ints = new ArrayList<Integer>(Arrays.asList(it));
ints.add(4);
System.out.println(ints);