toArray(T[] a)和toArray()的区别

12
我一直在学习如何使用Java进行编程,但是我没有得到关于LinkedList的toArray(T[] a)和toArray()方法之间区别的明确解释。第二个方法只是将LinkedList对象中的所有元素作为数组返回,对吗?但是,第一个方法呢?
编辑:
我的意思是,我阅读了来自Oracle的文档,它说:
返回一个包含此列表中所有元素的数组,按正确顺序排列(从第一个元素到最后一个元素);返回的数组的运行时类型是指定数组的类型。如果列表适合指定的数组,则返回其中。否则,将使用指定数组的运行时类型分配新数组,并将其大小设置为此列表的大小。如果列表适合具有剩余空间的指定数组(即,数组具有比列表更多的元素),则在列表结束后紧接着该数组中的元素将设置为null。(仅当调用者知道列表不包含任何null元素时,这对于确定列表的长度非常有用。)
像toArray()方法一样,此方法充当基于数组和基于集合的API之间的桥梁。此外,此方法允许精确控制输出数组的运行时类型,并且在某些情况下可用于节省分配成本。
我不理解显示为粗体的句子的含义。
2个回答

27

假设你有一个List<String>,并且你想将它转换为String[]。让我们看看两种方法的工作原理:

List<String> source = new LinkedList<String>();
// Fill in some data

Object[] array1 = source.toArray();
String[] array2 = source.toArray(new String[source.size()]);

看到区别了吗?第一个只是创建了一个Object[],因为它不知道类型参数<T>的类型,而第二个则填充了你传递的String[](这正是你想要的)。你几乎总是需要使用第二种方法。


3
使用String[] array3 = (String[]) source.toArray();怎么样?我猜这不被推荐,但为什么呢? - jamsandwich
@jamsandwich 我在另一个问题中找到了这个答案,它可能会提供一些解释。 - Ranosama
2
使用 toArray(new String[0])。请参见 https://dev59.com/j3VC5IYBdhLWcg3w0EsD - tkruse

3

这里有两个不同之处:

  1. 第一个返回 T[],而第二个返回 Object[]
  2. 第一个接受一个数组作为参数,如果这个数组足够大,它会使用这个数组来存储集合的元素,而不是创建一个新的数组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接