黑马程序员技术交流社区

标题: Arrays的中方法asList()返回的List和接口list的异同 [打印本页]

作者: 梅雄新    时间: 2012-2-12 18:43
标题: Arrays的中方法asList()返回的List和接口list的异同
本帖最后由 梅雄新 于 2012-2-13 00:35 编辑

int[] p ={1,2,3,4}

1.List list = Arrays.asList(p); 和List<Integer> llist1 = Arrays.asList(p);
   问下List<T> = Arrays.asList(数组);  有T和没有T ,就是用泛型和不用却别是什么

2.List<Integer> llist1 = Arrays.asList(p); 能不能使用 add()和remove()方法,为什么
作者: 张建银    时间: 2012-2-12 19:05
1.用泛型表示List必须装T这种类型,T可以是任意类型,但是List中所有元素必须同一种类型,如果没有加<T>,List中可以混装很多类型的对象的引用,我没试过你可以试下是否可以混装多种类型,例如把Integer,String等多种类型的对象引用放进不带<T>的List中
2.Arrays.asList这个方法是对List接口的实现,你查查jdk中List中是否有add,remove方法就知道了能不能用了
作者: 陈丹阳    时间: 2012-2-12 19:14
用了泛型 只能存T类型或者T的子类类型对象,不用泛型集合都是可以存任意类型的
作者: 侯丽星    时间: 2012-2-12 21:48
没有使用泛型时,只要是对象,不管是什么类型的对象,都可以存储进同一个集合中。使用泛型集合,可以将一个集合中的元素限定为一个特定类型,集合中只能存储同一个类型的对象,这样更安全;并且当从集合获取一个对象时,编译器也可以知道这个对象的类型,不需要对对象进行强制类型转换。
作者: 戚雪晖    时间: 2012-2-13 00:22
本帖最后由 1毫秒的价值 于 2012-2-13 00:23 编辑

Arrays.asList()返回的是List,而且是一个定长的List,所以不能转换为ArrayList,只能转换为AbstractList
原因在于asList()方法返回的是某个数组的列表形式,返回的列表只是数组的另一个视图,而数组本身并没有消失,对列表的任何操作最终都反映在数组上. 所以不支持remove,add方法的
以下是测试:
Integer[] arr={1,4,6,3,2};
List<Integer> list=Arrays.asList(arr);
System.out.println(list.size()+"----"+arr[1]);
list.set(1,2);//改变此list实例里的角标1位置的值为2
System.out.println(list.size()+"----"+arr[1]);
输出结果为先4后2,可以看出改变了集合里数据的同时,数组的数值也被改变了,因此此方法返回的是一个列表视图,也可以想象成是这个数组的另一种表现形式。因此他有数组的特性,既然有数组的特性,那么数组存在以后就不能改变其长度了,当然add及remove方法后就会发生UnsuportedOperationException,既是不支持该请求操作异常





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2