You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LinkedList调用toArray传入数组后结果出现null,原因是什么?

为什么LinkedList.toArray(T[])会产生null值?

咱们直接拆解你遇到的问题,核心是LinkedList.toArray(T[] a)这个方法的既定行为,结合你的代码场景就能一目了然:

先看你的代码片段:

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]

关键原因:toArray(T[] a)的规范设计

Java集合框架里的Collection.toArray(T[] a)方法有明确的行为规则:

  • 如果传入的数组a长度 大于等于 集合元素数量,会把集合所有元素依次复制到数组的前N个位置(N是集合元素总数)。
  • 当数组长度大于集合元素数时,复制完所有集合元素后,紧接着最后一个集合元素的下一个位置(索引为N的位置)会被设置为null——这个null是用来标记集合元素的结束点,方便后续遍历代码区分哪些是集合内的内容,哪些是数组原本的冗余部分。

对应到你的代码场景

你的links集合有7个元素,传入的alphabets数组长度是9:

  1. 先把7个颜色元素复制到数组的前7个位置(索引0到6),覆盖了原来的"A"到"G";
  2. 因为数组长度9 > 7,所以在索引7的位置(第8个元素)设置为null;
  3. 索引8的位置(第9个元素)是原来的"I",这个位置超出了「集合元素数+1」的范围,不会被方法修改,因此保留原值。

这就是输出里出现null的根本原因啦。

内容的提问来源于stack exchange,提问作者Amin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:16:29