11

LinkedList我一直在学习如何使用 java 编程,但我对'stoArray(T[] a)toArray()method的区别没有任何明确的解释。第二个只是将 LinkedList 对象中的所有元素作为数组返回,对吗?但是,第一个呢?

编辑 :

我的意思是,我从 oracle 阅读了文档,它说:

以正确的顺序(从第一个元素到最后一个元素)返回一个包含此列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。如果列表适合指定的数组,则在其中返回。否则,将使用指定数组的运行时类型和此列表的大小分配一个新数组。如果列表适合指定的数组并有剩余空间(即,数组的元素多于列表),则数组中紧随列表末尾的元素设置为空。(仅当调用者知道列表不包含任何空元素时,这对确定列表的长度很有用。)

与 toArray() 方法一样,此方法充当基于数组的 API 和基于集合的 API 之间的桥梁。此外,此方法允许对输出数组的运行时类型进行精确控制,并且在某些情况下可用于节省分配成本。

我不明白以粗体显示的句子的含义。

4

2 回答 2

26

假设您有一个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[]您传递的(这是您想要的)。您几乎总是需要使用第二种方法。

于 2015-02-08T10:07:27.087 回答
3

有两个区别:

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