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

Java 如何查看队列中的特定元素,然后获取该元素?,java,queue,Java,Queue,如何在队列中搜索特定对象,然后将此对象优先于队列中的其他对象 例如,我在队列中有一个对象列表,每个对象都需要处理,但我需要将某些对象优先于其他对象。现在它是一个链表,所以它们是按照添加到队列中的顺序执行的,但是如果添加了具有优先级的对象,那么它需要跳转到队列的顶部,以便在其他对象之前执行 private Queue<Packet> packetQueue = new LinkedList<Packet>(); @Override public boolean handl

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

例如,我在队列中有一个对象列表,每个对象都需要处理,但我需要将某些对象优先于其他对象。现在它是一个链表,所以它们是按照添加到队列中的顺序执行的,但是如果添加了具有优先级的对象,那么它需要跳转到队列的顶部,以便在其他对象之前执行

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;
}
private Queue packetQueue=new LinkedList();
@凌驾
公共布尔handlePacketQueue(){
试一试{
分组p=null;
已同步(打包队列){
p=packetQueue.poll();
}
if(p==null){
返回false;
}
packetType=p.getPacketId();
packetSize=p.getPacketLength();
buffer=p.getPacketData();
如果(包类型>0){
PacketManager.handlePacket(这个,packetType,packetSize);
}
p=零;
返回true;
}捕获(例外情况除外){
例如printStackTrace();
}
返回false;
}

现在,我需要在执行任何其他操作之前,对具有特定id的数据包进行优先级排序。有人能帮我怎么做吗?

在构造PriorityQueue时,您可以指定一个比较器来确定顺序

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

private PriorityQueue<Packet> packetQueue = new PriorityQueue<>((p1, p2) ->
    p1.getPacketId() == specified_id ? -1 : 0);
private PriorityQueue packetQueue=new PriorityQueue((p1,p2)->
p1.getPacketId()==指定的\u id?-1:0);

这给了指定的_id一个提升,而其他的保持不变。在比较器中实现您的优先级排序。

改用。也许您真的想要一个?即使使用优先级队列,我如何在队列顶部生成特定数据包,而不是将其添加到末尾?PriorityQueue中的项目是根据自然顺序排序的。您还可以通过向priorityQueue的构造函数提供Comparator对象来定制该逻辑。