Java中的Arrays.asList(T... a)相关问题
在《Thinking in Java》中提到使用Arrays.asList(T... a)这个方法生成的List是不能修改其长度的,书中解释说“其底层表示是数组,因此不能调整尺寸”。我觉得这个解释还足以说服我。因为ArrayList的底层也是数组啊,为什么我们可以随便改变它的大小,而通过Arrays.asList(T... a)生成的List就不能改变呢?然后查看ArrayList的源代码,发现ArrayList的长度改变时,其核心就是做一个数组的拷贝操作而已。查看Arrays这个类的源代码:
这个方法做的操作就是返回一个ArrayList呀!
public static <T> List<T> asList(T... a) { return new ArrayList<T>(a); }但是仅接着在这个方法的下边它定义了一个静态的内部类,名字就叫ArrayList,上面这个方法使用的就是这个ArrayList:
private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable{....}
查看了其源代码总算是明白了,ArrayList这个内部类就是以一个固定大小的数组来实现的,调用会修改其长度的方法并不进行数组拷贝。
虽然明白了为什么我们不能更改其长度,但是一个新的问题又来了:
为什么不直接使用java.util.ArrayList这个类,而要在内部定义并使用这样一个不可以改变长度的内部的ArrayList呢?
这个问题我暂时没想明白,希望老师能帮忙解释一下。