Which is faster - inserting an element at the end of an array or a linked list
哪个更快 - 在数组或链表的末尾插入一个元素?
-
数组是指ArrayList还是实际数组? 因为添加到数组中的任何点都是相同的速度,但它不能更长
-
关键的事情:微妙的细节很重要。 所以可能想要更新您的问题,以确保精确。 你想看看:stackoverflow.com/questions/559839/…
-
可能是Java ArrayList与LinkedList上的Performance的重复,仅与Creation / Insertion和排序有关,Java ArrayList和LinkedList - 在结束实现细节时添加元素,何时使用LinkedList over ArrayList?,ArrayList vs LinkedList Java,java linkedlist比arraylist慢 什么时候添加元素?
当你说"数组"时我假设你的意思是ArrayList,因为在Java中你不能"添加"到一个完整的数组。
首先,如果你"插入到最后",你实际上是在追尾,而不是"插入"。这种区别很重要,因为在任意位置插入ArrayList是O(n)操作,因为右边的所有元素必须沿着一个位置"移位",以便为插入的元素腾出空间。
添加到LinkedList的(尾部)始终是O(1)(恒定时间)操作。
添加到ArrayList通常是O(1)操作,但如果后备阵列已满,则可能是O(n)操作,因为必须分配新数组并复制每个元素。在数组未满的一般情况下,ArrayList的性能(稍微)比LinkedList快,但差异非常小。
两者的摊销成本是相同的,但如果每次都需要恒定时间,则只有LinkedList才能这样做。
-
要回答所问的问题,如果索引>=数组长度或<0,则添加到数组的"结尾"将导致IndexOutOfBoundsException,否则为O(1)。
-
"当你说"数组"时,我认为你的意思是ArrayList,因为在Java中你不能"添加"到一个完整的数组。" 谁说它已经满了?
将元素附加到Array的末尾会比添加到LinkedList更快,因为添加到LinkedList始终意味着在列表末尾创建单元格,然后向其添加值。在Array中,您只需向现有单元格添加值。但是,在Array中,如果它已经已满并且没有空格,则在LinkedList中将获得IndexOutOfBoundsException,您将永远不会遇到此问题,因为List将始终根据您的需要增长。此外,LinkedList和ArrayList之间存在明显差异,ArrayList存在随机访问,这意味着对任何元素的访问始终为O(1),而在LinkedList中,它始终是顺序访问,这意味着访问时间将根据索引而不同,在最坏的情况下,情况是O(n)。但是,附加到LinkedList总是O(1)但在ArrayList中不是这样。如果没有填充ArrayList,它将是O(1)但如果它已满,它将首先增加多个单元格并且仅十,它会添加值,所以最坏的情况是O(n)