Arrays.asList()用来将输入对象转变为ArrayList对象。
List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
用起来很方便,但使用的时候有几个注意事项:
1.入参避免使用基本数据类型
先看个程序:
public static void main(String[] args) {
int[] ints = {1,2,3,4,5};
List list = Arrays.asList(ints);
System.out.println("size:" + list.size());
}
预期结果数组大小应该是5,实际结果却是1:
这是因为asList的入参是泛型,而8种基本数据类型无法泛型化,故而没有报错,转换结果也不对。
asList源码:
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
使用8种基本数据类型的包装类型就没有问题:
public static void main(String[] args) {
Integer[] ints = {1,2,3,4,5};
List list = Arrays.asList(ints);
System.out.println("size:" + list.size());
}
2.asList产生的列表不能添加或删除元素
public static void main(String[] args) {
Integer[] ints = {1,2,3,4,5};
List list = Arrays.asList(ints);
list.add(6);
}
运行结果:
这是因为asList返回的ArrayList不是java.util.ArrayList,而是Arrays的内部类:
该内部类只支持size、toArray、get、set、indexOf、contains
方法,而像add、remove
等改变list结果的方法从AbstractList父类继承过来,并没有实现。