删除元素后,为什么需要将ArrayList的元素向左移动



据我所知,以下是删除ArrayList中元素的步骤。

  1. 无需对目标元素执行任何操作
  2. 沿着数组从删除元素后的1到最后一个元素进行迭代
  3. 将每个元素复制到其前面的位置1
  4. 将最后一个元素设置为null

为什么不将要删除的元素设置为null?这只需要一步。

有人能解释一下上述方案的优点吗?提前谢谢。

因为它们不一样(让我们删除"c"(:

  • ["a", "b", "d", "e"]
  • ["a", "b", null, "d", "e"]

拆卸和更换之间有很大区别:

  • 移除会更改索引、移除元素并移动(影响(其余索引。这也会更改列表的大小。例如,元素"d"可在索引2(从3移动(处访问
  • 替换将替换项目并保持元素的索引,列表的大小也保持不变。例如,元素"d"在索引4处是可访问的(未改变(

为什么不将我们想要删除的元素设置为null?

将元素"设置"为null不是删除元素,而是替换一个元素。

这种方法还有另一个问题,如果列表中的null意味着该索引处的元素被"移除",那么如果我想实际将null存储为元素呢?如何区分移除的元素和实际的null元素?

利用List<T>API中的remove方法,不要试图尽可能地重新发明车轮。

。。。因为列表就是这样工作的。许多用例都需要这种动态大小调整行为,因此Java为List概念提供了一个接口。ArrayList是List的几种实现之一,LinkedList是另一种。

我们已经有了你所描述的行为,数组——所以在你需要这种行为的地方,你可以使用String[]

ArrayList就像数组一样,有一个区别——它们可以调整大小(在本例中无关紧要(
考虑以下数组:[ref1,ref2,ref3,ref4],其中ref1:4是对某些对象的引用。这意味着它们不包含对象本身,它们只指向对象。现在,如果您想删除ref2,例如通过声明它为null,这意味着它现在不会指向任何对象(ref2 = null(,但这并不意味着引用本身会消失。您的新数组(ArrayList(现在将为[ref1,null,ref3,ref4]。你看到了吗?更换和拆卸是有区别的。。。。

相关内容

  • 没有找到相关文章

最新更新