繁体   English   中英

java.util.LinkedList addLast()性能

[英]java.util.LinkedList addLast() performance

java.util.LinkedList中的addLast()或add()或offer()等效方法的渐近复杂性是什么? 是O(N)还是O(1)? 也就是说,LinkedList是在内部保留指向其尾部的指针,还是从头开始遍历列表?

不管哪种方式,您将如何利用在offer()方法中更有效但仍使用标准库的FIFO队列具体实现? (无自定义队列实现)。 LinkedList是一个不错的选择还是其他?

我意识到这个问题以前可能是被问过的,但是搜索了很长时间后却找不到答案。

是的,您可以在列表JavaDoc中读取该列表的末尾指针。

所有操作均按双向链表的预期执行。 索引到列表中的操作将从列表的开头或结尾开始遍历列表,以更接近指定索引的位置为准。

因此,诸如addLast()add()需要O(1)时间。

该文档特别指出LinkedList适用于队列实现。

List接口的链接列表实现。 实现所有可选的列表操作,并允许所有元素(包括null)。 除了实现List接口之外,LinkedList类还提供统一命名的方法,以获取,删除和在列表的开头和结尾插入元素。 这些操作允许将链表用作堆栈, 队列或双端队列

addlast仅()

O(1),Java只需要创建一个新节点,并将其先前的节点值指向现在倒数第二个节点,然后将该节点的下一个节点值指向新创建的节点即可。

加()

如果指定索引,则为O(N)(实际上是N / 2,因为它会根据指定的索引从正面或背面进行遍历)。 如果您不指定索引,请使用O(1),因为它与addLast()本质上相同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM