Java中的LinkedList上调用size()的时间复杂度是多少?

Mar*_*son 47 java size linked-list time-complexity

正如标题所示,我想知道LinkedList类中的size()方法是否需要分摊O(1)时间或O(n)时间.

Gre*_*nie 63

这是O(1).你可以谷歌搜索源代码,你会得到这样的:

来自http://www.docjar.com/html/api/java/util/LinkedList.java.html

我看过的所有Collection类都将大小存储为变量,并且不会遍历所有内容来获取它.

  • 在NetBeans中按住Ctrl键单击会比google更快地找到它;) (2认同)

Kri*_*ris 17

正如你所发现的O(1)你看过源代码了......

来自LinkedList:

private transient int size = 0;
Run Code Online (Sandbox Code Playgroud)

...

/**
 * Returns the number of elements in this list.
 *
 * @return the number of elements in this list
 */
public int size() {
   return size;
}
Run Code Online (Sandbox Code Playgroud)

  • 这是来自Java 1.6.这不依赖于VM,但(理论上)在旧版本的标准库中可能有所不同.如果你想100%确定,请检查你的版本的来源,但没有理智的开发人员会根据需要计算这样的大小,其中一切都在内存中,你可以在创建结构时计算它. (6认同)
  • 如果你根本不使用Sun的实现?http://en.wikipedia.org/wiki/Java_Class_Library#Alternative_implementations我认为他的问题是它是否保证是O(1),而不是在任何特定的实现/版本中是否为O(1). (5认同)
  • 自引入LinkedList以来1.2的实现是一样的,所以它总是O(1) (2认同)