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:
- 先把7个颜色元素复制到数组的前7个位置(索引0到6),覆盖了原来的"A"到"G";
- 因为数组长度9 > 7,所以在索引7的位置(第8个元素)设置为
null; - 索引8的位置(第9个元素)是原来的"I",这个位置超出了「集合元素数+1」的范围,不会被方法修改,因此保留原值。
这就是输出里出现null的根本原因啦。
内容的提问来源于stack exchange,提问作者Amin
相关产品推荐
相关产品推荐

