Java Collections'之间有什么区别?两个toArray()函数?

时间:2015-11-27 07:09:55

标签: java collections

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

2 个答案:

答案 0 :(得分:1)

方法

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

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

方法

Object[] toArray()

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

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

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

答案 1 :(得分:-1)

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

两种方法之间存在两个差异

  1. 第一个不是通用的(意味着你需要施放),而第二个是通用的
  2. 第一个将实例化一个新数组,而在第二个数组中,您可以自己提供将要使用的数组。它的大小需要等于或大于集合中元素的数量(或者方法也必须实例化一个数组),但是如果你打算向它添加更多的元素,你可以提供更大的元素。
  3. 对于你的代码,它不会编译

    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]);