【发布时间】:2014-06-01 19:47:01
【问题描述】:
在 Java 中,我目前设置了我的 PriorityQueue 以将对象添加到列表中需要它们的位置,理想情况下,我想对所有移动的项目调用一个方法,例如:
列表 = {0,10,20,30,40,50,60,70,80,90,100}。
加 55
列表 = {0,10,20,30,40,50,55,60,70,80,90,100}
会向下移动的对象: {0,10,20,30,40,50}(索引:7,8,9,10,11,12)
我只需要担心这个列表中最高的 8 个项目,所以,理想情况下它只会调用方法:
{40,50}(索引:7,8)
如果低于该索引的任何内容发生更改,我无需费心检查它。 我已经尝试通过创建一个 LinkedList、使用 Collections.sort 并在下一个排序之前克隆前 8 个元素来做到这一点。但我不断遇到空指针或索引越界异常。
谁能提供一个更通用的方法来解决这个问题? 我目前的迭代方法:
Hit[] sorted = hitList.toArray(new Hit[hitList.size()]);
for (int i = sorted.length - 1; i > 0; i--) {
if (sorted[i] != clone[i]) { // Nullpointer, arrays are not of equal length
System.out.print("CHANGE AT " + i);
}
System.out.println("");
}
我的意思是,肯定有一种方法可以避免这整个难题,例如扩展优先级列表和覆盖 add... 这不是一个选项,因为所有有用的方法都是私有的。
【问题讨论】:
-
PriorityQueue 仅跟踪顶部元素。剩余元素的顺序未指定。您必须使用
SortedSet或手动排序集合。
标签: java arrays list sorting priority-queue