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
类型。
另一答案
这些方法返回数组内集合的元素。
这两种方法有两点不同
- 第一个不是通用的(意味着你需要铸造),而第二个是通用的
- 第一个将实例化一个新数组,而在第二个数组中,您可以自己提供将要使用的数组。它的大小需要等于或大于集合中元素的数量(或者方法也必须实例化一个数组),但如果您计划向其中添加更多元素,则可以提供更大的元素。
对于您的代码,它将无法编译
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中排序函数sort()使用,Arrays.sort()和Collections.sort()