为何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")这一行:
- 执行
al.remove(2)后,原列表中索引3的null会向前移动到索引2的位置,此时列表是[A,10,null] - 你调用的是
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
相关产品推荐
相关产品推荐

