本帖最后由 张慧 于 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的原因,所有才导致不可更改吗?
|