java.util.LinkedList addLast()性能

时间:2014-08-08 16:03:25

标签: java linked-list queue

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

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

我之前可能已经意识到这个问题,但是在搜索了很长一段时间后我找不到答案。

2 个答案:

答案 0 :(得分:3)

是的,列表中有一个指向尾部的指针,您可以在class JavaDoc中阅读。

  

所有操作的执行都与双向链表一样。索引到列表中的操作将从开头或结束遍历列表,以较接近指定索引为准。

因此addLast()add()等操作需要O(1)时间。

文档明确指出LinkedList适用于队列实现。

  

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

答案 1 :(得分:2)

<强> addlast仅()

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

添加()

如果指定索引,则为O(N)(实际上是N / 2,因为它根据您指定的索引从前面或后面移动)。如果您没有指定索引,则为O(1),因为它与addLast()

基本相同