【发布时间】:2018-11-18 18:21:22
【问题描述】:
假设我有两个选项可以在集合中添加项目并对其进行排序
选项 1:遍历所有项并在迭代时将项添加到 TreeSet
选项 2:遍历所有项目并将项目添加到列表中,并在添加所有项目后使用 Collections.sort() 方法。
这两个选项中哪个选项的运行时间更快?
【问题讨论】:
标签: java collections
假设我有两个选项可以在集合中添加项目并对其进行排序
选项 1:遍历所有项并在迭代时将项添加到 TreeSet
选项 2:遍历所有项目并将项目添加到列表中,并在添加所有项目后使用 Collections.sort() 方法。
这两个选项中哪个选项的运行时间更快?
【问题讨论】:
标签: java collections
我会选择选项 2。
Collections.sort() 的时间复杂度是 O(nlog(n)) (添加元素是 O(n) 但最终 O(n)+O(nlog(n))=O( nlog(n))),而 TreeSet.Add 的复杂度为 O(log n),导致添加所有项目时的复杂度为 O(nlog n)。所以复杂度看起来是一样的。最好的方法是分析您的实际代码,两种解决方案的不同之处在于 Big O 中未显示的常数因子,我敢肯定,在 TreeSet 的情况下它相当高。
【讨论】: