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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张慧 中级黑马   /  2013-9-30 11:03  /  1162 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张慧 于 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的一个集合对象,源码如下:
  1. public static <T> List<T> asList(T... a) {
  2. return new ArrayList<T>(a);
  3.     }
复制代码

new ArrayList<T>(a):在对应的构造器中,其实只是将类中定义的一个final类型的数组对象的引用指向了传递的参数
的数组引用,源码如下:

  1. <P>private final E[] a;</P>
  2. <P> ArrayList(E[] array) {
  3.             if (array==null)
  4.                 throw new NullPointerException();
  5.      a = array;
  6. }</P>
复制代码
这么看来数组a其实是转换过后的集合对象中主要的存储对象了,因为是final的原因,所有才导致不可更改吗?

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马