【发布时间】:2014-09-12 06:27:08
【问题描述】:
我面临的问题是这个:
我有一个doubles 数组,我想从中保留顶部k 更大的值。
- 我见过一些涉及
Arrays.sort的实现。例如在 this example 中存在相关问题,建议使用这种方法。 - 因为我只对第一个
k元素感兴趣,所以我还尝试了MinMaxPriorityQueue。我创建了一个MinMaxPriorityQueue和一个maximumSize:
当然还有自动装箱。
Builder<Comparable> builder = MinMaxPriorityQueue.maximumSize(maximumSize);
MinMaxPriorityQueue<Double> top2 = builder.create();
问题是顺序是升序的,它与我想要的相反。所以我不能这样用。
为了说明问题的真实参数,我的数组大约是 50 元素长,我对最上面的 k = 5 元素感兴趣。
那么有没有办法使用第二种方法绕过这个问题?即使我真的不需要对所有元素进行排序,我是否应该保留第一个?你知道速度性能是否有任何显着差异(我将不得不在很多情况下使用它,所以这就是需要速度的地方)?我可以使用其他解决方案吗?
至于性能,我知道理论上我可以自己检查它,但我有点没时间了,如果有人有任何解决方案,我很高兴听到它(或无论如何阅读它)。
【问题讨论】:
-
Arrays.sort(new double[]{...})不涉及自动装箱。 -
是的,但它不适用于
double[]的相反顺序 -
为什么需要逆序?只需对其进行排序,然后取最后一个
k元素。 -
是的,你说得对。
-
如果您只有 50 个元素,那么您太担心性能了,除非您打算在非常小的设备(旧的 android 手机?)上运行您的程序。你打算扩展它来处理非常大的数组吗?