【问题标题】:What is the time complexity of a size() call on a LinkedList in Java?在 Java 中对 LinkedList 调用 size() 的时间复杂度是多少?
【发布时间】:2010-10-26 04:41:40
【问题描述】:

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

【问题讨论】:

  • 注意,对于并发结构,计算大小可能很慢,而且毫无意义。

标签: java size linked-list time-complexity


【解决方案1】:

它是 O(1)。你可以google一下源代码,你会得到这样的:

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

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

【讨论】:

  • 在 NetBeans 中按住 ctrl-click 会发现它比 google 还要快 ;)
【解决方案2】:

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

来自链表:

private transient int size = 0;

...

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

【讨论】:

  • 如果您根本不使用 Sun 的实现呢? en.wikipedia.org/wiki/…我认为他的问题是它是否保证是O(1),而不是在任何特定的实现/版本中是否是O(1)。
  • 自1.2引入LinkedList以来,实现一直是一样的,所以它总是O(1)
  • 这是来自 Java 1.6。这不依赖于 VM,但(理论上)在旧版本的标准库中可能会有所不同。如果您想 100% 确定,请检查您的版本的来源,但没有理智的开发人员会根据需要计算所有内容都在内存中的大小,并且您可以在创建结构时对其进行统计。
猜你喜欢
  • 1970-01-01
  • 2012-02-13
  • 2013-05-21
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多