例如,我有一对未定义的数量(键,值)。我希望在迭代期间通过这些对构建排序列表(这是长操作)。
我认为在迭代后使用BinaryTree作为排序结构并从树构建列表。
一般来说,您如何看待这种方法比通过对从迭代中获取的列表的简单排序更快?
解决此问题的最佳方法是什么?
是否存在针对此问题的一些Java API项目?
答案 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 来确定向列表中添加新元素的正确插入点,从而保持排序顺序,而无需实际需要任何排序操作。