我有一个具有"优先级的对象"这是一个1-3范围内的int,当然意味着更高的优先级。
我有一个链接列表,其中包含一种Queue中的对象。基本上我想要做的是循环LinkedList,并将新Object与列表中已有的对象进行比较,如果Object到达一个Object,它的int优先级高于下一个Object,我希望它在之前插入优先级较低的对象。
如果情况是Object与其他对象具有相同的优先级,我希望它插入具有相同优先级的对象后面。如果Object无法找到优先级低于它的另一个Object,我只想在最后插入它。
这就是我目前所拥有的
User s;
ListIterator <User> queue = getList().listIterator();
if (queue.hasNext()) {
User next;
while (queue.hasNext()) {
next = queue.next();
if (queue.hasNext() && next.getId() < s.getId()) {
queue.add(next);
queue.set(s);
} else {
queue.add(next);
}
}
}else {
queue.add(s);
}
答案 0 :(得分:2)
请改用java.util.PriorityQueue
。
为了满足您的要求,即必须按插入顺序删除相同优先级的条目,您需要提供基于优先级和时间戳的自定义比较器。如果您无法修改条目对象以包含时间戳,则需要创建一个包装器来保存优先级,时间戳和对条目的引用。但是,它将确保具有相同优先级的后续条目在删除顺序中稍后出现。
还要注意这样一个事实:PriorityQueue
的迭代器以随机顺序返回条目,并且不按优先级顺序迭代。只有删除才能保证按优先级顺序返回条目。 (有关原因的解释,请参阅https://stackoverflow.com/a/8129239/18157)