如何保持N最高值?

时间:2015-05-26 19:24:34

标签: java max

我正在做一个方法,它使用double getDelay()从很多对象中获取值。但我需要一些帮助,因为我不知道如何保存6个更高的值。我想做一个循环并在数组中保存值,但我不知道如何插入新值并删除最小值并重新排序数组。有关保存和订购价值的建议吗?

编辑: 多亏了所有,我忘了说我必须保存对象(或者带有getName()的String中的名称,我也不在乎)。我认为使用队列,但我不会控制它们很多。我怎么订购?因为如果我使用Array.sort,我不知道这个值是什么对象

3 个答案:

答案 0 :(得分:1)

您可以使用Arrays.sort(yourArr)然后获取最后N个条目。

见答案:Java - Ordering array values from highest to lowest

答案 1 :(得分:1)

您可以在double[] array中添加所有值。然后像这样使用Arrays.sort()

Arrays.sort(array,Collections.reverseOrder()); // this will sort array in descending order

现在,您可以访问此数组的前6个元素,以获得最大的6个值。

编辑:如果您还想保留对象,可以使用TreeMap<Double,Object>。用id和对象填充它。 TreeMap中的元素按键排序,此处为Double。

然后您可以像TreeMap一样检索List<Object> highest = new ArrayList<Object>; for(int i=0; i<6; i++){ Double last = treemap.getLastKey(); Object objLast = treemap.get(last); hightest.put(objLast); treemap.remove(last); } 中的最后6个元素:

ArrayList

注意:如果您希望同时使用double实现来保存Map和{{{{}},我已使用double来存储具有最高Object的对象1}}。希望这会有所帮助。

答案 2 :(得分:1)

您实际上想要创建Comparator<MyObject>并直接对MyObject数组进行排序:

Comparator<MyObject> myComparator = (o1, o2) -> {
    o1.getDelay() > o2.getDelay() ? -1 : (o1.getDelay() < o2.getDelay()  ? 1 : 0);
} // Reverse order by getDelay()
MyObject[] stuff;
Arrays.sort(stuff, myComparator);
for (int i = 0; i < 6; i++) {
    doSomething(stuff[i]);
}