如何根据优先级将Object插入LinkedList

问题描述 投票:0回答:1

我有一个具有“优先级”的对象,它是一个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);
}
java sorting linked-list
1个回答
2
投票

请改用java.util.PriorityQueue

为了满足您的要求,必须按插入顺序删除相同优先级的条目,您需要提供基于优先级和时间戳的自定义比较器。如果您无法修改条目对象以包含时间戳,则需要创建一个包装器来保存优先级,时间戳和对条目的引用。但是,它将确保具有相同优先级的后续条目在删除顺序中稍后出现。

还要注意PriorityQueue的迭代器以随机顺序返回条目并且不按优先级顺序迭代这一事实。只有删除才能保证按优先级顺序返回条目。 (有关原因的解释,请参阅https://stackoverflow.com/a/8129239/18157

© www.soinside.com 2019 - 2024. All rights reserved.