Java系列:Collection.toArray用法研究

该方法的签名如下:

<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被填充的时候,他和返回值其实是同一个数组;

原文地址:https://www.cnblogs.com/strinkbug/p/5050217.html