我正在做一个方法,它使用double getDelay()
从很多对象中获取值。但我需要一些帮助,因为我不知道如何保存6个更高的值。我想做一个循环并在数组中保存值,但我不知道如何插入新值并删除最小值并重新排序数组。有关保存和订购价值的建议吗?
编辑: 多亏了所有,我忘了说我必须保存对象(或者带有getName()的String中的名称,我也不在乎)。我认为使用队列,但我不会控制它们很多。我怎么订购?因为如果我使用Array.sort,我不知道这个值是什么对象
答案 0 :(得分:1)
您可以使用Arrays.sort(yourArr)然后获取最后N个条目。
答案 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]);
}