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

时间:2015-02-08 10:04:14

标签: java list toarray

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

编辑:

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

  

返回一个包含此列表中所有元素的数组   序列(从第一个到最后一个元素);运行时的类型   返回的数组是指定数组的数组。 如果列表适合   指定的数组,在其中返回。否则,一个新的数组是   分配了指定数组的运行时类型和大小   这个清单。如果列表适合指定的数组,并且有空余空间   (即,数组中的元素多于列表),元素中的元素   紧跟在列表末尾之后的数组设置为null。 (这个   仅在调用者时才有助于确定列表的长度   知道该列表不包含任何null元素。)

     

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

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

2 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:2)

有两点不同:

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