您的位置:首页 > 编程语言 > Java开发

Arrays类asList()方法遇到的问题

2016-07-19 09:54 260 查看
asList()方法返回的是一个受指定数组支持的固定大小的列表。问题一:当是数组的类型是基本数据类型时,是将这个数组作为一个整体当成参数传入的。
publicclass Test {publicstaticvoid main(String[] args) {int[] a = {1,2,3,4};List list = Arrays.asList(a);System.out.println(list.size());      }}期望的输出是 list里面也有4个元素,也就是size为4,然而结果是1.原因如下:    在Arrays.asList中,该方法接受一个变长参数,一般可看做数组参数,但是因为int[] 本身就是一个类型,所以a变量作为参数传递时,编译器认为只传了一个变量,这个变量的类型是int数组,所以size为1,相当于是List中数组的个数。基本类型是不能作为泛型的参数,按道理应该使用包装类型,但这里却没有报错,因为数组是可以泛型化的,所以转换后在list中就有一个类型为int的数组如果将int[] a = {1,2,3,4};改成Integer[] a = {1,2,3,4};刚一切正常。
问题二:
Arrays.asList返回的列表不能进行增加和删除操作,即列表的长度不能改变。可以使用set()方法修改列表中的元素。     我们都知道,List的一个典型的特性就是其长度是可变的,我们可以很方便地对它进行插入和删除元素的操作,这是它与数组所存在的一个很大的区别,后者的长度是固定的,而且我们不能从数组中删除元素,只能修改元素的值。利用Arrays.asList(array)将返回一个List,然而这个返回的List并不支持add和remove的操作。原因如下:这里的ArrayList并不是java.util.ArrayList,而是Arrays的内部类:我们可以看到该内部类继承的是AbstractList,下面是AbstractList的add和remove方法源码:
publicbooleanadd(E e) {add(size(), e);returntrue;}publicvoidadd(intindex, E element) {thrownewUnsupportedOperationException();}publicE remove(intindex) {thrownewUnsupportedOperationException();}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java Arrays asList