黑马程序员技术交流社区
标题: 关于Arrays的一个问题 [打印本页]
作者: 张慧 时间: 2013-9-30 11:03
标题: 关于Arrays的一个问题
本帖最后由 张慧 于 2013-9-30 11:05 编辑
Arrays中asList():将数组转换成list集合。例如:
String[] arr = {"aaa","bbb","ccc"};
List<String> list = Arrays.asList(arr);//将arr数组转成list集合。
谁能讲一下这个转换的实现原理,因为转换过后返回的对象是的长度是固定的,不能进行add,remove,clear的操作。
不然会出现UnsupportedOperationException的异常。
看源码之后发现该方法其实就是返回一个用数组new的一个集合对象,源码如下:
- public static <T> List<T> asList(T... a) {
- return new ArrayList<T>(a);
- }
复制代码
而new ArrayList<T>(a):在对应的构造器中,其实只是将类中定义的一个final类型的数组对象的引用指向了传递的参数
的数组引用,源码如下:
- <P>private final E[] a;</P>
- <P> ArrayList(E[] array) {
- if (array==null)
- throw new NullPointerException();
- a = array;
- }</P>
复制代码这么看来数组a其实是转换过后的集合对象中主要的存储对象了,因为是final的原因,所有才导致不可更改吗?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |