【问题标题】:Difference between toArray(T[] a) and toArray()toArray(T[] a) 和 toArray() 的区别
【发布时间】:2015-04-08 04:26:43
【问题描述】:

我一直在学习如何使用 java 进行编程,但对于 LinkedList 的 toArray(T[] a) 和 toArray() 方法的区别,我没有任何明确的解释。第二个只是将 LinkedList 对象中的所有元素作为数组返回,对吗?但是,第一个呢?

编辑:

我的意思是,我阅读了 oracle 的文档,上面写着:

以正确的方式返回包含此列表中所有元素的数组 序列(从第一个到最后一个元素);的运行时类型 返回的数组是指定数组的数组。 如果列表适合 指定的数组,在其中返回。否则,一个新数组是 分配有指定数组的运行时类型和大小 这个清单。如果列表适合指定的数组并有剩余空间 (即,数组的元素比列表的多), 紧跟在列表末尾的数组设置为空。 (这 仅当调用者在确定列表的长度时才有用 知道列表不包含任何空元素。)

与 toArray() 方法一样,该方法充当了两者之间的桥梁 基于数组和基于集合的 API。此外,该方法允许 精确控制输出数组的运行时类型,并且可能, 在某些情况下,用于节省分配成本。

我不明白以粗体显示的句子的含义。

【问题讨论】:

    标签: java list toarray


    【解决方案1】:

    假设您有一个List<String>,并且您想将其转换为String[]。让我们看看两种方法的工作原理:

    List<String> source = new LinkedList<String>();
    // Fill in some data
    
    Object[] array1 = source.toArray();
    String[] array2 = source.toArray(new String[source.size()]);
    

    看到区别了吗?第一个只是创建了一个Object[],因为它不知道类型参数&lt;T&gt; 的类型,而第二个只是填充了您传递的String[](这是您想要的)。您几乎总是需要使用第二种方法。

    【讨论】:

    • 使用String[] array3 = (String[]) source.toArray();怎么样?我认为这是不推荐的,但为什么不呢?
    • @jamsandwich 我在另一个问题中找到了this answer。它可能会提供一些解释。
    • 使用 toArray(new String[0])。见stackoverflow.com/questions/174093
    【解决方案2】:

    有两个区别:

    1. 第一个返回T[],第二个返回Object[]
    2. 第一个接受一个数组作为参数,如果这个数组足够大,它会使用这个数组来存储 Collection 的元素,而不是创建一个新的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 2014-12-12
      • 2016-09-05
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      相关资源
      最近更新 更多