本帖最后由 walang 于 2010-07-13 22:43:10 编辑

解决方案 »

  1.   

    第一个问题可能出于效率考虑,未考证
    第二个问题,是为了没用的元素可以被GC垃圾回收,如果没有置null,数组引用了没用的对象,但该对象对用户来说确实是无用的,却得不到释放,长此以往,就outofmemory了
      

  2.   

     public <T> T[] toArray(T[] a) {
      int size = size();
      if (a.length < size)
      a = (T[])java.lang.reflect.Array
    .newInstance(a.getClass().getComponentType(), size);  Iterator<E> it=iterator();
    Object[] result = a;
      for (int i=0; i<size; i++)
      result[i] = it.next();
      if (a.length > size)
    a[size] = null;
      return a;
      }

    实在理解不了,哪位大虾解释下,明天继续揣摩
      

  3.   

    1:Arrays 中的 ArrayList 是内部类。而且私有。你如果想使用,只能通过其父类类型的变量对其引用。
    2:Arrays 中的 ArrayList 对 AbstractList 的实现与 java.util.ArrayList 不同,最大的区别是 Arrays 中的 ArrayList 类的大小是不可变的。也就是说,一旦创建了这个 ArrayList (这个你不能直接控制创建,因为它是 private 的),它的 size 将不能改变。即不能向 ArrayList 中添加和删除元素。这个不对,虽然看似是这个效果,但是概念上就错了。在 Java 中,如果两个存在两个同名的类,那么区分它们的唯一办法就是通过类的“完整限定名”(即:包名.类名)这也是 java 引入“包”的目的。这之所以在 Arrays 中  new ArrayList<T> 创建的不是 java.util.ArrayList 而是 Arrays 的内部类-ArrayList 是因为
    1:Arrays 中没有 import java.util.ArrayList;
    2:创建 ArrayList 的编码为: new ArrayList() 。 因为没有 import 其它包中的 ArrayList ,也没有在该类名前指定包名,所以 JVM 认为该 ArrayList 是当前包中的类(有点类似于“相对路径”,这只是个人感觉,不要影响你啊,呵呵。)。(如果是 new java.util.ArrayList() 则创建的肯定就是java.util.ArrayList() 类)这个在 API 文档中有说明,当然是参考 java.util.ArrayList 的说明,但作用和目的,我想是一致的。
    可见设置 null 的作用是为了标识原 ArrayList 的列表长度。但需要一定的条件,即:Arrays.ArrayList does not contain any null elements你的意思应该是正确的吧,呵呵。准确一些说应该是,将 Arrays.ArrayList 中的元素。拷贝到了 Java.util.ArrayList 中。