黑马程序员技术交流社区
标题:
asList用法
[打印本页]
作者:
霍明波
时间:
2012-9-23 22:32
标题:
asList用法
import java.util.Arrays;
import java.util.List;
import java.util.ListIterator;
public class Test15 {
public static void main(String[] args){
int[] a = {1,3,7,9,5,9,4,3,6,1,7};
List<int[]> list = Arrays.asList(a);
list.remove(0);
list.remove(8);
ListIterator<int[]> it = list.listIterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
写了上面的程序 编译的时候没有问题,运行就报异常,aslis这个方法怎么用,有什么用,返回类型是List,list的方法能不能用,报异常的原因是什么,纠结中。
作者:
程振
时间:
2012-9-23 23:02
首先List<int[]>这种用法不推荐,why?我没见别人用过,所以少用。
修改如下
Integer[] a = {1,3,7,9,5,9,4,3,6,1,7};
List<Integer> list = Arrays.asList(a);
ListIterator<Integer> it = list.listIterator();
对于list.remove(8)
抛出java.lang.UnsupportedOperationException,
因为Arrays.asList(T... a)返回的是一个list view意思是镜像,不可修改。
所以list.remove(8)抛出异常。
你也可以查看源码来找出原因:
因为
1.
Arrays.asList(a)
2.
public static <T> List<T> asList(T... a) {
// 这里的ArrayList来自java.util.Arrays.ArrayList.ArrayList(T[] array)
return new ArrayList<T>(a);
}
3. 在Arrays$ArrayList.class里面定义有
private static class ArrayList<E> extends AbstractList<E>
4. 在java.util.AbstractList<E>中,
public E remove(int index) {
throw new UnsupportedOperationException();
}
思路大致就是这,可能有点乱
作者:
皮卫凯
时间:
2012-9-23 23:10
List<int[]> list = Arrays.asList(a);
楼主这句话意思是把a直接写进了List,而且还是固定了int[]的长度为1.
因为asList
public static <T> List<T> asList(T... a)返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直接写”到数组。)
楼上的哥们也说了,用到的比较少。
作者:
严海荣
时间:
2012-9-23 23:12
import java.util.Arrays;
import java.util.List;
import java.util.ListIterator;
public class Test15 {
public static void main(String[] args){
// int[] a = {1,3,7,9,5,9,4,3,6,1,7};
Integer[] a = {1,3,7,9,5,9,4,3,6,1,7};
//List<int[]> list = Arrays.asList(a);//它把a当作一个元素存如集合,此集合就1个元素
List<Integer> list = Arrays.asList(a);
// list.remove(0);
// list.remove(8);
// ListIterator<int[]> it = list.listIterator();
System.out.println(list);
ListIterator<Integer> it = list.listIterator();
while(it.hasNext()){
System.out.println(it.next());//打印的是数组的哈希值
}
}
}
复制代码
数组变成集合,不可以使用集合的增删方法,因为数组的长度是固定的。
所以你的remove()方法是不能使用的。
如果数组中的元素都是对象。那么变成集合时,数组中的元素就直接转成集合中的元素。
如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
所以你集合中的元素只有数组a,打印出数组的哈希值。
用Integer可以把里面的数自动装箱成对象,然后才能打印出来。
作者:
吴兵
时间:
2012-9-23 23:55
将数组变成集合,不可以使用集合的增删功能,因为长度是固定的,否则就抛出UnsupportedOperationException这个异常只能使用contains,get,indexOf,subList
毕老师视频,第十七天,视频16,09分18秒
作者:
王贵朝
时间:
2012-9-24 07:50
嗯,基本上就是楼上说的这样数组作为集合是不可以用集合的增删方法
作者:
霍明波
时间:
2012-9-24 08:23
那有什么用啊, 感觉这个方法时废柴啊,没有其他用了吗?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2