【发布时间】:2011-07-09 12:47:37
【问题描述】:
我正在复习算法和数据结构,并有一些问题和陈述希望您检查。
ArrayList - O(1) (size, get, set, ...), O(n) - 添加操作。
LinkedList - 所有操作O(1) (包括 add() ),但检索第 n 个元素除外,即 O(n)。我假设 size() 操作也在 O(1) 中运行,对吧?
TreeSet - 所有操作 O(lg(N))。 size() 操作需要 O(lg(n)),对吧?
HashSet - 如果应用适当的哈希函数,所有操作 O(1)。
HashMap - 所有操作 O(1),类似于 HashSet。
非常欢迎任何进一步的解释。提前谢谢你。
【问题讨论】:
-
如果你有这么神奇的HashSet,为什么还需要ArrayList?
-
@Stas:因为 List 和 Set 不是一回事,也因为常数因素仍然可以有很大的不同......
-
@Stas:该命令仅让您了解操作的扩展方式。它不会告诉你因素,例如HashSet 可以比 ArrayList 慢很多倍,并且没有 get()/set() 方法。
-
@Peter Lawrey, @Jon Skeet 你是对的。这就是为什么我认为这种同情具有误导性。
-
@Stas:如果您不了解大 O 表示法,它们只会产生误导。我没有看到这里有人被误导或混淆的证据。
标签: java algorithm collections