当前位置: 首页 > 知识库问答 >
问题:

如何根据优先级将对象插入LinkedList

唐增
2023-03-14

我有一个“优先级”为1-3的int的对象,递增意味着优先级更高。

我有一个链表,其中有一种队列中的对象。基本上,我要做的是循环遍历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);
}

共有1个答案

林魁
2023-03-14

改用java.util.PriorityQueue

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

还要注意这样一个事实,即优先级队列的迭代器以随机顺序返回条目,而不是以优先级顺序进行迭代。只有删除才能保证按优先级顺序返回条目。(参见https://stackoverflow.com/a/8129239/18157解释原因)

 类似资料:
  • 问题内容: 在Python文档中, 最低值的条目首先被检索(最低值的条目是由返回的条目)。条目的典型模式是形式为的元组。 看来队列将按优先级排序,然后按数据排序,这可能并不总是正确的。假设数据“项目2”在“项目1”之前入队,则项目1仍将排在第一位。在另一个文档页面heapq中,它建议使用计数器。所以我将数据存储为。是否没有类似的东西 那我就不需要自己执行订购吗? 问题答案: 据我所知,您要找的东西

  • 我想知道,一旦对象被删除并重新插入队列以更新其优先级,是否无论如何都要保持优先级队列中对象的优先级? 我这样做的方法是从优先级队列中删除对象,并将更新后的对象再次放入队列中。然而,这将破坏我使用<code>比较器实现的自然排序 <代码>比较器 : 例如 按以下顺序插入:约翰、亚历克斯、科比、简 优先级队列的形式如下:[Jane,100],[Kerby,59],[Alex,33],[John,13]

  • 问题内容: 首先,这个问题的标题太可怕了,但是我没有找到更好的方式来描述我的问题。 可能有一种非常简单的方法来执行此操作,但我无法弄清楚。这与这个问题非常相似,但是我在sqlite3(iOS)上运行,因此我怀疑我的选择受到更多限制。 我有一张带有产品记录的表格。所有记录都有一个ID(请注意:我不是在说行ID,而是每个产品唯一的标识号)。某些产品在表中可能有两个条目(两者都具有相同的ID)。唯一的区

  • 我正在尝试将log4j升级到log4j2。我试图升级的特定代码行是: 静态字段在新的中不再可用。相反,似乎使用了静态方法来访问优先级int值,可以将指定为。 但是,此方法还需要指定。在调用时,如何知道要指定哪个? 旧优先级:https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/priority.html 新优先级:https:/

  • 我试图在O(mlogn)时间内对Dijkstra算法进行编码,其中m是边数,n是节点数。我用它来查找给定起始节点和给定结束节点之间的最短路径。我对这个很陌生。 假设图由邻接矩阵表示,每个节点都有一个行索引。 这是O(mlogn),因为每个边只更新一次距离。 “初始化堆需要线性时间,然后执行m次更新,每次更新的代价为O(log n),总时间为O(mlog n)。”-http://www.cs.cmu

  • 我所拥有的是一个类,它创建了一个具有优先级、到达时间和完成时间的对象。我还有许多优先级队列可以将它们放入其中。当我开始时,我将它们放入到达队列中,对它们进行排序,然后查看哪个第一个进入,并将其放入队列中。但是,当我尝试向到达队列添加第二个队列时,它会失败并抛出一个异常。我首先要做的是将所有进程添加到到达队列中,然后对它们进行排序,这样到达时间最短的进程将是到达队列中第一个进入队列的进程。谢谢你帮忙