Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在数组或链表的末尾插入元素,哪个更快_Java_Arrays_Linked List - Fatal编程技术网

Java 在数组或链表的末尾插入元素,哪个更快

Java 在数组或链表的末尾插入元素,哪个更快,java,arrays,linked-list,Java,Arrays,Linked List,在数组或链接列表的末尾插入元素,哪个更快?我想你说的是“数组”,因为在Java中不能“添加”到完整数组中 首先,如果你“在结尾插入”,你实际上是在结尾附加,而不是“插入”。这种区别很重要,因为在任意位置插入ArrayList是一种O(n)操作,因为右侧的所有元素都必须沿一个位置“移动”,以便为插入的元素腾出空间 添加到a的尾部始终是一个O(1)(恒定时间)操作 添加到ArrayList通常是一个O(1)操作,但如果备份数组已满,则可能是一个O(n)操作,因为必须分配一个新数组,并跨多个数组复制每

在数组或链接列表的末尾插入元素,哪个更快?

我想你说的是“数组”,因为在Java中不能“添加”到完整数组中

首先,如果你“在结尾插入”,你实际上是在结尾附加,而不是“插入”。这种区别很重要,因为在任意位置插入ArrayList是一种O(n)操作,因为右侧的所有元素都必须沿一个位置“移动”,以便为插入的元素腾出空间

添加到a的尾部始终是一个O(1)(恒定时间)操作

添加到ArrayList通常是一个O(1)操作,但如果备份数组已满,则可能是一个O(n)操作,因为必须分配一个新数组,并跨多个数组复制每个元素。在数组未满的一般情况下,ArrayList的性能(略)比LinkedList快,但差别非常小


两者的摊销成本相同,但如果每次都需要固定时间,只有链接列表才能做到这一点。

数组
的末尾追加一个元素会比添加到
链接列表
更快,因为添加到
链接列表
总是意味着在列表的末尾创建一个单元格,然后向其添加一个值。在数组中,您只需向现有单元格添加一个值。但是,在
数组中
如果已满且没有空间,您将获得
索引自动边界异常
,而在
链接列表中
您将永远不会遇到此问题,因为列表将根据您的需要不断增加。
LinkedList
ArrayList
之间也有明显的区别,
ArrayList
有一个随机访问,这意味着对任何元素的访问总是O(1)而在
LinkedList
中,始终是顺序访问,这意味着访问时间将根据索引而有所不同,在最坏的情况下是O(n)。但是,在
LinkedList
中,附加到
LinkedList的总是O(1),但在
ArrayList
中不是这样,如果它不满,它将是O(1),但是如果它满了,它将首先增长一个以上的单元格,并且只增加十个值,所以最坏的情况是O(n)

按数组,您是指ArrayList还是实际数组?因为添加到数组中的任何一点的速度都是一样的,但不会太长。这里的关键点是:细微的细节很重要。因此,be可能希望更新您的问题,使其更加精确。如果索引是
=
数组长度或
,我想你说的“array”是指ArrayList,因为在Java中,你不能“添加”到完整的数组,所以在数组的“end”中添加索引将导致
索引自动边界异常谁说已经满了?