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

为何ArrayList的add(int index, E)方法不替换元素?为何null未被"M"替换?

嘿,这俩问题其实都是对ArrayList核心方法的逻辑理解偏差,我来给你拆解明白~

问题1:为什么ArrayList的add(int index, E element)方法不会替换指定位置的现有元素?

这完全是方法设计意图的问题:add(int index, E element)从诞生起就是用来做插入操作的,而不是替换。

ArrayList底层是基于数组实现的,当你调用这个方法时,它会先检查索引是否合法,然后把index位置及之后的所有元素向后移动一位,腾出index这个位置,再把新元素放进去。整个过程不会覆盖任何已有元素,只会让列表的长度+1。

如果你的需求是替换指定位置的元素,应该用set(int index, E element)方法——这个方法才会直接覆盖index位置的现有元素,并且列表长度保持不变。

问题2:执行给定Java代码时,为什么ArrayList中的null值未被"M"替换?

咱们先把你的代码完整贴出来,再一步步分析执行流程:

ArrayList al=new ArrayList();
al.add("A");
al.add(10);
al.add("A");
al.add(null);
System.out.println(al); // 输出 [A, 10, A, null]
al.remove(2);
System.out.println(al); // 输出 [A, 10, null]
System.out.println(al.get(2)); // 输出 null
al.add(2,"M"); // 关键就在这一步
System.out.println(al); // 输出 [A, 10, M, null]
al.add("N");

问题出在al.add(2,"M")这一行:

  1. 执行al.remove(2)后,原列表中索引3的null会向前移动到索引2的位置,此时列表是[A,10,null]
  2. 你调用的是add(int index, E element),这是插入操作——它会把索引2的null向后移动到索引3,然后把"M"插入到索引2的位置,所以最终列表变成[A,10,M,null],而不是替换掉null

如果想要把索引2的null替换成"M",你应该调用al.set(2,"M"),这样执行后列表会变成[A,10,"M"],长度保持3不变。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:22:51