为构建排序列表选择什么基本算法?如何在添加到排序列表期间获得最佳性能?

时间:2009-08-29 08:19:25

标签: java algorithm list

例如,我有一对未定义的数量(键,值)。我希望在迭代期间通过这些对构建排序列表(这是长操作)。

我认为在迭代后使用BinaryTree作为排序结构并从树构建列表。

一般来说,您如何看待这种方法比通过对从迭代中获取的列表的简单排序更快?

解决此问题的最佳方法是什么?

是否存在针对此问题的一些Java API项目?

4 个答案:

答案 0 :(得分:6)

您可以将它们全部放入TreeMap中,让Java处理排序。然后你可以遍历地图,你将按照排序顺序获得你的密钥。

答案 1 :(得分:2)

  

一般来说,你是如何思考的   方法比简单排序快   列表从迭代槽中获取   对?

没有。如果正确实现排序和树,则两者的复杂性相同:O(n * log(n))。对于常数因素,最好自己做一些基准测试。树可能需要更多内存,至少与像quicksort这样的就地排序算法相比。

Java API:

    树的
  • java.util.TreeMap
  • java.util.Collections.sort()进行排序

答案 2 :(得分:0)

在C ++中,STL的性能可能足以满足初始实现 - 避免“过早优化” - 假设您在单个线程上,否则我总是推荐Duffy的“Windows上的并发编程”。

答案 3 :(得分:0)

如果您绝对需要使用列表,则可以使用 Collections.binarySearch 来确定向列表中添加新元素的正确插入点,从而保持排序顺序,而无需实际需要任何排序操作。