gpt4 book ai didi

java - 如何查看队列中的特定元素,然后获取该元素?

转载 作者:行者123 更新时间:2023-12-01 13:01:29 26 4
gpt4 key购买 nike

如何在队列中搜索特定对象,然后将该对象优先于队列中的其他对象。

例如,我在队列中有一个对象列表,每个对象都需要处理,但我需要优先考虑某些对象而不是其他对象。目前它是一个链表,因此它们按照添加到队列的顺序执行,但是假设添加了一个具有优先级的对象,它需要跳到队列的顶部才能在其余对象之前执行.

private Queue<Packet> packetQueue = new LinkedList<Packet>();

@Override
public boolean handlePacketQueue() {
try {
Packet p = null;
synchronized (packetQueue) {
p = packetQueue.poll();
}
if (p == null) {
return false;
}
packetType = p.getPacketId();
packetSize = p.getPacketLength();
buffer = p.getPacketData();
if (packetType > 0) {
PacketManager.handlePacket(this, packetType, packetSize);
}
p = null;
return true;
} catch (Exception ex) {
ex.printStackTrace();
}
return false;
}

现在我需要在执行任何其他数据包之前对具有特定 ID 的数据包进行优先级排序。有人可以帮我解决这个问题吗?

最佳答案

构造 PriorityQueue 时,指定一个 Comparator 来确定顺序。

在JDK8中,使用lambda,你可以这样做,

private PriorityQueue<Packet> packetQueue = new PriorityQueue<>((p1, p2) ->
p1.getPacketId() == specified_id ? -1 : 0);

这使指定的 id 得到提升,而其他则保持不变。在比较器中实现您的优先级。

关于java - 如何查看队列中的特定元素,然后获取该元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23483332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com