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

问题描述 投票:0回答:2

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

java collections
2个回答
1
投票

方法

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

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

方法

Object[] toArray()

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

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

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


-1
投票

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

这两种方法有两点不同

  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]);
© www.soinside.com 2019 - 2024. All rights reserved.