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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树