List<String> c = new ArrayList<String>();
c.add("aa");
c.add("bb");
String[] strs = c.toArray(new String[c.size()]);
                String[] sss = c.toArray(new String[0]);
for(String s:strs){
System.out.println(s);
}toArray(参数),这个参数为什么new String[0]会产生c同样大的数组呢?比如c里面有10个元素,那么strs和sss是一样的,为什么会这样呢

解决方案 »

  1.   

    这函数提供的功能就是把list转成Array数组的。为什么去看源码吧。
      

  2.   

    toArray源码其实比较了下size,小于strs的length的话,就new一个strs length的一个新数组lz看下源码就知道了。
      

  3.   

    恩,是这样的.<T> T[] t.toArray(T[] a) 他会比较t大小和a.大小.
    如果t的大小>a.length,则以t的大小为准;
    如果t的size<a.length;则以a.length为准,先copy t到数组,(a.length-t.size)后的每一项为null;
    如果t.size==a.length ,则copy t到数组。
      

  4.   

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;public class TestToArray {
        public static void main(String[] args) {
    List<String> c = new ArrayList<String>();
    c.add("aa");
    c.add("bb");
    for(int i= 0; i<10; i++) {
    String[] strs = c.toArray(new String[i]);
        System.out.println(Arrays.toString(strs));
    }
        }
    }
    /*
    [aa, bb]
    [aa, bb]
    [aa, bb]
    [aa, bb, null]
    [aa, bb, null, null]
    [aa, bb, null, null, null]
    [aa, bb, null, null, null, null]
    [aa, bb, null, null, null, null, null]
    [aa, bb, null, null, null, null, null, null]
    [aa, bb, null, null, null, null, null, null, null]
    *//**
     * Returns an array containing all of the elements in this list in
     * proper sequence (from first to last element); the runtime type of
     * the returned array is that of the specified array.  If the list fits
     * in the specified array, it is returned therein.  Otherwise, a new
     * array is allocated with the runtime type of the specified array and
     * the size of this list.
     *
     * <p>If the list fits in the specified array with room to spare (i.e.,
     * the array has more elements than the list), the element in the array
     * immediately following the end of the list is set to <tt>null</tt>.
     * (This is useful in determining the length of the list <i>only</i> if
     * the caller knows that the list does not contain any null elements.)
     *
     * <p>Like the {@link #toArray()} method, this method acts as bridge between
     * array-based and collection-based APIs.  Further, this method allows
     * precise control over the runtime type of the output array, and may,
     * under certain circumstances, be used to save allocation costs.
     *
     * <p>Suppose <tt>x</tt> is a list known to contain only strings.
     * The following code can be used to dump the list into a newly
     * allocated array of <tt>String</tt>:
     *
     * <pre>
     *     String[] y = x.toArray(new String[0]);</pre>
     *
     * Note that <tt>toArray(new Object[0])</tt> is identical in function to
     * <tt>toArray()</tt>.
     *
     * @param a the array into which the elements of this list are to
     *          be stored, if it is big enough; otherwise, a new array of the
     *          same runtime type is allocated for this purpose.
     * @return an array containing the elements of this list
     * @throws ArrayStoreException if the runtime type of the specified array
     *         is not a supertype of the runtime type of every element in
     *         this list
     * @throws NullPointerException if the specified array is null
     */
     
      

  5.   

    Returns an array containing all of the elements in this list in
     * proper sequence (from first to last element); the runtime type of
     * the returned array is that of the specified array.  If the list fits
     * in the specified array, it is returned therein.  Otherwise, a new
     * array is allocated with the runtime type of the specified array and
     * the size of this list.
     *
     * <p>If the list fits in the specified array with room to spare (i.e.,
     * the array has more elements than the list), the element in the array
     * immediately following the end of the list is set to <tt>null</tt>.
     * (This is useful in determining the length of the list <i>only</i> if
     * the caller knows that the list does not contain any null elements.)
     *
      

  6.   

    这种问题一般查API就行了:“<T> T[] toArray(T[] a)返回按适当顺序(从第一个元素到最后一个元素)包含列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。如果指定数组能容纳列表,则在其中返回该列表。否则,分配具有指定数组的运行时类型和此列表大小的新数组。” 
      

  7.   


    我也想这么回答的,API写的很清楚了!!!