该方法的签名如下:
<T> T[] Collection.toArray(T[] arrayToFill);
这里想验证两个问题:
1)arrayToFill什么时候会被填充;
2)arrayToFill和返回值是否是同一个值?
测试代码如下。
static void testToArray(){ LinkedList<String> strList = new LinkedList<String>(); strList.add("zhang.san"); strList.add("li.si"); strList.add("wang.wu"); print("filled array is not large enough."); testToArrayHelper(strList, new String[2]); print("filled array is large enough."); testToArrayHelper(strList, new String[3]); } static void testToArrayHelper(LinkedList<String> strList, String[] filledArray){ String[] returnedArray = strList.toArray(filledArray); printArray("filled array:", filledArray); print(""); printArray("returned array:", returnedArray); print(""); if(filledArray == returnedArray) print("filled array is equal returned array."); else print("filled array is not equal returned array."); } static <T> void printArray(String title, T[] array){ print(title); for(T item: array){ if(item != null) print("item:" + item.toString()); else print("item is null"); } } static void print(String info){ System.out.println(info); }
输出日志如下:
filled array is not large enough. filled array: item is null item is null returned array: item:zhang.san item:li.si item:wang.wu filled array is not equal returned array.
filled array is large enough.
filled array:
item:zhang.san
item:li.si
item:wang.wu
returned array:
item:zhang.san
item:li.si
item:wang.wu
filled array is equal returned array.
结论,
1)如果arrayToFill的长度如果小于Collection的长度,则不会填充;
2)当arrayToFill被填充的时候,他和返回值其实是同一个数组;