如Java API Doc和this post中所述,list.add(index,element)导致给定元素被添加到给定索引处。在此过程中,随后的列表项向右移动一个位置(如API文档中所述在其索引中添加一个)
我的问题是这实际上如何发生?
假设我们有一个包含100个元素的ArrayList,我们说xml2
,考虑到基础数据结构是一个数组,那么API将如何完成此操作?
更具体地说:是否会将所有现有的100个元素复制到其紧邻的正确位置?还是有一种更有效的处理方式?
答案 0 :(得分:1)
对于ArrayList
,元素确实会向上移动。这只是线性内存访问,因此实际上出奇的快。
使用ArrayDeque
(使用循环缓冲区)可以更快地插入前端。也就是说,它不仅跟踪最后一个元素索引,而且还跟踪第一个元素索引和数组。不幸的是,ArrayDeque
并没有实现它可能应做的List
。
非常慢的LinkedList
可以快速删除第一个元素,但通常非常慢。
所有这些类的源代码都是免费提供的,并且不太复杂。