Java Collections的两个toArray()函数有什么区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Collections的两个toArray()函数有什么区别?相关的知识,希望对你有一定的参考价值。

位于here.阅读这些文档,我不清楚这种区别的原因。明显不同的是第一个方法返回一个Object数组,看起来第二个返回一个Generic数组。您能解释一下这些将如何以不同方式实施,以及它们之间的区别是什么?

答案

方法

<T> T[] toArray(T[] a)

已经将数组作为参数获取,因此能够返回具有相同基类型的数组。

方法

Object[] toArray()

不知道基类型(提醒:泛型类型在运行时被擦除),因此它只能返回一个对象数组。

简单地说:对于一个Collection<String>,你会在调用第一种方法时得到一个String[],并且在调用第二种方法时你会得到一个Object[]。这些是不同的类型。

只是一个注释:这与收藏品一样。由于泛型类型在运行时被擦除,因此List<String>List<Object>在运行时是相同的List类型。

另一答案

这些方法返回数组内集合的元素。

这两种方法有两点不同

  1. 第一个不是通用的(意味着你需要铸造),而第二个是通用的
  2. 第一个将实例化一个新数组,而在第二个数组中,您可以自己提供将要使用的数组。它的大小需要等于或大于集合中元素的数量(或者方法也必须实例化一个数组),但如果您计划向其中添加更多元素,则可以提供更大的元素。

对于您的代码,它将无法编译

List<String> myCollection = new ArrayList<>();
nyCollection.add("example");
Object[] array1 = myCollection.toArray();

// a new array will be created by the toArray method
String[] array2 = myCollection.toArray(new String[0]);

// the provided array will be used
String[] array3 = myCollection.toArray(new String[2]);

以上是关于Java Collections的两个toArray()函数有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

java里的Collections类中的静态方法sort()是怎么用比较器比较两个对象?

java collections 可以对 map操作吗

java中排序函数sort()使用,Arrays.sort()和Collections.sort()

JAVA中Collection和Collections的区别

Java基础Map接口+Collections

java中Collections.sort排序详解