1.如果是基本类型,他代表是一个对象,所以size是1 改正:改成包装类:Integer
public static void main(String[] args) { int[] a={1,2,3}; List ints = Arrays.asList(a); System.out.println(ints.size()); // 1 ints.forEach(x-> System.out.println(x));// [I@68f7aae2 }
2.如果修改了数组的值,遍历list的时候,值也会改变,地址引用
public static void main(String[] args) { Integer[] a={1,2,3}; List ints = Arrays.asList(a); a[0]=10; ints.forEach(x-> System.out.println(x));// 10,2,3 }
3.asList的数组无法进行,添加删除操作,只能查看,因为他自身是一内部类,里卖没有重写add方法,所以执行的是父类的AbstractList的add方法
而父类的add方法就是直接报错
public static void main(String[] args) { Integer[] a={1,2,3}; List ints = Arrays.asList(a); ints.add(4);// java.lang.UnsupportedOperationException }
4.对于subList得到的数组无法强制转换成ArrayList,SubList是ArrayList的一个内部类 Sublist只是一个ArrayList的一个视图,所以转换失败
但是用List是可以正常转换的
public static void main(String[] args) { Integer[] a={1,2,3}; List ints = Arrays.asList(a); ArrayList list = (ArrayList)ints.subList(0, 1);
// List list = ints.subList(0, 1);正常 同时如果修改ints数组的值,sublist的数组也会改变,因为也只是地址引用关系
list.forEach(x-> System.out.println(x));// java.lang.ClassCastException: java.util.RandomAccessSubList cannot be cast to java.util.ArrayList
}
5 对于上面问题,sublist可能会造成OOM
因为sublist截取之后,原数组无法被回收,会一直在内存中
解决:用new ArrrayList来接收返回的sublist数组
标签:大坑,Arrays,list,ArrayList,List,ints,asList From: https://www.cnblogs.com/foreverstudy/p/17511939.html