java - 如何根据优先级将对象插入链表

标签 java sorting linked-list

我有一个具有“优先级”的对象,它是一个范围从 1 到 3 的整数,当然增加意味着更高的优先级。

我有一个链接列表,其中包含某种队列中的对象。基本上我想要做的是循环遍历 LinkedList,并将新对象与列表中已有的对象进行比较,如果该对象到达一个比下一个对象具有更高 int 优先级的对象,我希望将其插入到具有较低优先级的对象。

如果该对象与其他对象具有相同的优先级,我希望将其插入到与其具有相同优先级的对象后面。如果该对象无法找到另一个优先级低于它的对象,我只是希望将其插入到最后。

这就是我现在拥有的

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.util.PriorityQueue

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

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

关于java - 如何根据优先级将对象插入链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48047270/

相关文章:

C++链表遍历和修改

java - 使用springFramework在java中发送邮件出错

java - 用 Java 解析 XML

sql - 简单、快速的平面文件 SQL 查询

c - 插入排序进行到一半时打印数组的内容

mysql - 如何在对记录进行编号时使用 MySQL 选择多行?

c - 将Node插入第一名C编程

java - 删除单链表中第二次出现的特定对象

java - Spring-Boot - 只有对象的某些变量是绑定(bind)的

java - 使用 Spring 时取消存储过程调用