A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 梅雄新 于 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()方法,为什么

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

4 个回复

倒序浏览
1.用泛型表示List必须装T这种类型,T可以是任意类型,但是List中所有元素必须同一种类型,如果没有加<T>,List中可以混装很多类型的对象的引用,我没试过你可以试下是否可以混装多种类型,例如把Integer,String等多种类型的对象引用放进不带<T>的List中
2.Arrays.asList这个方法是对List接口的实现,你查查jdk中List中是否有add,remove方法就知道了能不能用了

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
用了泛型 只能存T类型或者T的子类类型对象,不用泛型集合都是可以存任意类型的

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
没有使用泛型时,只要是对象,不管是什么类型的对象,都可以存储进同一个集合中。使用泛型集合,可以将一个集合中的元素限定为一个特定类型,集合中只能存储同一个类型的对象,这样更安全;并且当从集合获取一个对象时,编译器也可以知道这个对象的类型,不需要对对象进行强制类型转换。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
本帖最后由 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,既是不支持该请求操作异常

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马