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

Java中对LinkedList的size()调用的时间复杂度是多少?,java,size,linked-list,time-complexity,Java,Size,Linked List,Time Complexity,正如标题所问,我想知道LinkedList类中的size()方法是按O(1)时间摊销还是按O(n)时间摊销 O(1)如果您查看源代码,就会发现 从LinkedList: private transient int size = 0; 是O(1)。你可以在谷歌上搜索源代码,你会发现: 从 我所看到的所有集合类都将存储a的大小作为变量,而不是遍历所有对象来获取它。如果您根本没有使用Sun的实现,您会这样做吗?我认为他的问题是它是否保证是O(1),而不是在任何特定的实现/版本中它是否是O(1)。自

正如标题所问,我想知道LinkedList类中的size()方法是按O(1)时间摊销还是按O(n)时间摊销

O(1)如果您查看源代码,就会发现

从LinkedList:

private transient int size = 0;

是O(1)。你可以在谷歌上搜索源代码,你会发现:


我所看到的所有集合类都将存储a的大小作为变量,而不是遍历所有对象来获取它。

如果您根本没有使用Sun的实现,您会这样做吗?我认为他的问题是它是否保证是O(1),而不是在任何特定的实现/版本中它是否是O(1)。自从LinkedList引入1.2以来,实现一直是相同的,所以它将始终是O(1)。这是来自Java 1.6。这并不依赖于VM,但(理论上)在旧版本的标准库中可能会有所不同。如果你想100%确定的话,请检查你的版本源代码,但是没有一个理智的开发人员会根据需要计算这样的东西的大小,因为所有东西都在内存中,你可以在创建结构时计算出来。注意,对于并发结构,计算大小可能很慢,不管怎么说,这是毫无意义的。在NetBeans中按ctrl键会发现它比google还要快;)
/**
 * Returns the number of elements in this list.
 *
 * @return the number of elements in this list
 */
public int size() {
   return size;
}