Collection.toArray()和Collection.toArray(Object obj [])之间的区别

时间:2013-12-01 03:06:55

标签: java arrays

根据java doc for toArray() 返回一个包含此集合中所有元素的数组。

和toArray(Object obj [])。 返回包含此collection中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。

首先toArray()我理解但是第二个toArray(Object obj [])我无法理解。请以示例解释。

2 个答案:

答案 0 :(得分:5)

一个是通用的,另一个不是。 toArray()将返回Object[],而toArray(T[])将返回T[]类型的数组。

样品:

public static void main(String[] args) {
    Object[] baseArray = new ArrayList<String>().toArray();
    System.out.println(baseArray.getClass().getCanonicalName());

    String[] improvArray = new ArrayList<String>().toArray(new String[5]);
    System.out.println(improvArray.getClass().getCanonicalName());
}

输出:

java.lang.Object[]
java.lang.String[]

答案 1 :(得分:1)

首先,第二种方法是toArray(T[] a)而不是toArray(Object[] a)。第一个函数头中的T称为类型参数,这意味着它所引用的实际类会根据您调用方法的方式而更改。 toArray方法可以使用类型参数来使用类型T执行操作,而不知道T实际上是什么。

在此示例中,TString

x.toArray(new String[0])

在此示例中,TInteger

x.toArray(new Integer[0])

在此示例中,TMyClass

x.toArray(new MyClass[0])

方法toArray(T[] a)使用提供的类型信息返回给定类型的数组。例如,第一个示例将返回类型为String的数组,而第二个示例将返回类型为Integer的数组。

因此,对toArray()的调用会产生相同的结果(Object数组)作为对toArray(new Object[0])的调用。

有关泛型的更多信息,您可以查看this tutorial