【问题标题】:Passing an array that contains data to toArray method of List将包含数据的数组传递给 List 的 toArray 方法
【发布时间】:2018-03-30 15:13:16
【问题描述】:

我有一些这样的代码:

    String[] colors = {"black", "blue", "yellow", "red", "pink", "green", "cyan"};
    String[] alphabets = {"A", "B", "C", "D", "E", "F", "G", "H", "I"};
    LinkedList<String> links = new LinkedList<>(Arrays.asList(colors));
    System.out.println(links);
    colors = links.toArray(alphabets);
    System.out.println(Arrays.asList(colors));

它的输出是:

[black, blue, yellow, red, pink, green, cyan]
[black, blue, yellow, red, pink, green, cyan, null, I]

第二个输出行中的 null 是什么?为什么?

【问题讨论】:

  • RTM: 如果列表适合指定的数组并有剩余空间(即数组的元素多于列表),则数组中紧跟列表设置为空。

标签: java list toarray


【解决方案1】:

当您对方法的特定行为有疑问时,最好的答案来源是查看文档。

Java 文档指出:

toArray(T[] a)

如果列表适合指定的数组并有剩余空间(即 数组的元素多于列表),数组中的元素 紧跟在列表末尾之后的设置为 null。 (这是 仅当调用者知道时才可用于确定列表的长度 该列表不包含任何空元素。)

【讨论】:

    【解决方案2】:

    这就是LinkedList.toArray 的工作原理。基本上,您要求将包含 7 个元素的列表包装到 9 个元素大小的数组中。

    第 7 个元素是 null,因为 toArray 方法中的这段代码:

        if (a.length > size)
            a[size] = null;
    

    并且第 8 个元素从该数组的初始状态保持为 I

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 2017-02-17
      • 2016-04-09
      • 2023-04-05
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多