黑马程序员技术交流社区

标题: 关于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的一个集合对象,源码如下:
  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的原因,所有才导致不可更改吗?






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