Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList中的toArray(T[])方法_Java_Arraylist - Fatal编程技术网

Java ArrayList中的toArray(T[])方法

Java ArrayList中的toArray(T[])方法,java,arraylist,Java,Arraylist,在研究ArrayList实现时,我在toArray(T[])方法中发现了一段奇怪的代码 为什么数组中只有此索引处的元素设置为null?一旦数组中填充了列表的内容,剩余索引中的元素应该被设置为null,对吗?还是我遗漏了什么?解释了原因: 如果列表适合指定的数组且有空闲空间(即数组中的元素多于列表),则紧跟在列表末尾的数组中的元素将设置为null(只有在调用者知道列表不包含任何null元素时,这才有助于确定列表的长度。) 我相信它是这样的,当你点击null时,你可以查看项目并停止,但它不是万无一失

在研究ArrayList实现时,我在toArray(T[])方法中发现了一段奇怪的代码

为什么数组中只有此索引处的元素设置为null?一旦数组中填充了列表的内容,剩余索引中的元素应该被设置为null,对吗?还是我遗漏了什么?

解释了原因:

如果列表适合指定的数组且有空闲空间(即数组中的元素多于列表),则紧跟在列表末尾的数组中的元素将设置为
null
(只有在调用者知道列表不包含任何
null
元素时,这才有助于确定列表的长度。)


我相信它是这样的,当你点击
null
时,你可以查看项目并停止,但它不是万无一失的(因为你的项目可能合法地包含
null
)。99.9%的时间你不在乎剩下的项目是什么。如果你这样做了,你可以自己用空值填充它们。避免无意义的性能开销是关键。
 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;
    }
 if (a.length > size)
    a[size] = null;