首先,toArray(T[] a)方法的参数是一个数组,你给它传入什么类型的数组,它返回的就是什么类型的数组, 
数组的长度是固定的,既然是新建数组,数组的容量大小在创建时必须指定,所以[]中必须有数字,但不一定是0; 
toArray(T[] a)的方法体如下: 
 public <T> T[] toArray(T[] a) { 
        if (a.length < size) 
            // Make a new array of a's runtime type, but my contents: 
            return (T[]) Arrays.copyOf(elementData, size, a.getClass()); 
        System.arraycopy(elementData, 0, a, 0, size); 
        if (a.length > size) 
            a[size] = null; 
        return a; 
    } 
 
和楼主知道的一样: 
当指定类型的数组长度小于集合的size,那么该方法内部会创建一个新的数组,长度为集合的size,并且把数据拷贝一遍; 
当指定类型的数组长度大于集合的size,就不会新创建新数组了,而是使用传递进来的数组,只不过是将数组中紧跟在集合末尾的元素设置为 null; 
综上就可以看出, 
当做参数传入进去的 新建数组,长度小于集合的size效率是低的, 
长度是刚刚好 ,还是大于集合的size,没多大区别,取决于它返给你的数组,你是否还要对其进行操作 
如果你还要对返回的数组进行添加,那新建数组长度还是要大于集合size好,你觉得呢 |