You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按指定优先级规则将对象插入LinkedList队列?

实现按优先级规则插入LinkedList的正确方式

首先,我得指出你当前代码里的几个关键问题:

  • 你用了next.getId()和s.getId()做比较,但需求明确是基于priority属性判断优先级,不是ID
  • 遍历和插入的逻辑混乱,比如queue.add(next)会把当前元素重复添加,queue.set(s)的用法也完全不符合插入逻辑
  • 既没处理优先级相同的场景,也没正确实现“找不到更低优先级就插末尾”的规则

下面是完全符合你需求的正确实现,我会把逻辑拆解开讲清楚:

User s; // 假设这是要插入的新对象
LinkedList<User> userQueue = getList();
ListIterator<User> iterator = userQueue.listIterator();

boolean inserted = false;

while (iterator.hasNext()) {
    User current = iterator.next();
    // 情况1:新对象优先级更高,插入到当前低优先级元素之前
    if (s.getPriority() > current.getPriority()) {
        iterator.previous(); // 回退到当前元素的前一个位置,准备插入
        iterator.add(s);
        inserted = true;
        break;
    } 
    // 情况2:优先级相同,继续遍历直到找到同优先级的最后一个元素,插入到它后面
    else if (s.getPriority() == current.getPriority()) {
        // 检查下一个元素是否还是同优先级
        if (!iterator.hasNext() || iterator.next().getPriority() != s.getPriority()) {
            iterator.previous(); // 回退到当前current的位置
            iterator.add(s);
            inserted = true;
            break;
        }
        // 下一个还是同优先级,继续循环找最后一个同优先级元素
    }
}

// 情况3:遍历完所有元素,新对象优先级最低,直接插末尾
if (!inserted) {
    userQueue.add(s);
}

逻辑细节说明:

  • 优先级更高的场景:找到第一个优先级低于新对象的元素时,回退一步插入到它前面,保证高优先级元素排在前面
  • 优先级相同的场景:会一直遍历到同优先级元素的最后一个,然后插入到它后面,完全符合你“同优先级插在后面”的要求
  • 优先级最低的场景:如果遍历完整个列表都没找到比新对象优先级低的元素,就直接把它加在队列末尾

另外,记得给User类补充getPriority()方法来获取优先级属性,这样代码的可读性和规范性会更好。

内容的提问来源于stack exchange,提问作者ctooley17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:47:54