如何在Java中修改PriorityQueue的元素?

如何在Java中修改PriorityQueue的元素?,java,iterator,queue,updates,priority-queue,Java,Iterator,Queue,Updates,Priority Queue,我需要解决以下问题:我使用一个特定对象的PriorityQueue,并且我用于将其与其他对象进行比较的属性设置为所有对象的相同值 问题是:我需要修改它的一个对象(我的意思是,通过另一个属性找到它,并修改可比较的属性),然后将其从队列中移除。我不知道怎么做,因为peek()和poll()只是删除并返回队列的头,而remove()只是删除对象,这并不是我想要的。我也不知道如何在这里使用迭代器 这就是我到目前为止得到的代码: public void inicializaDijkstra(Grafo g

我需要解决以下问题:我使用一个特定对象的PriorityQueue,并且我用于将其与其他对象进行比较的属性设置为所有对象的相同值

问题是:我需要修改它的一个对象(我的意思是,通过另一个属性找到它,并修改可比较的属性),然后将其从队列中移除。我不知道怎么做,因为peek()和poll()只是删除并返回队列的头,而remove()只是删除对象,这并不是我想要的。我也不知道如何在这里使用迭代器

这就是我到目前为止得到的代码:

public void inicializaDijkstra(Grafo grafo, Vertice v0){

    Comparator<Grafo> comparator = new verticecomparator();
    PriorityQueue<Grafo> Queue = new PriorityQueue<Grafo>(grafo.getNumeroDeVertices,grafo);
    for (Vertice vertice : conjuntoDeVertices) {
        queue.add(vertice);

}
inicializaDijkstra公共空间(Grafo-Grafo,Vertice v0){
比较器比较器=新的垂直比较器();
PriorityQueue队列=新的PriorityQueue(grafo.getNumeroDeVertices,grafo);
对于(Vertice Vertice:ConventoDevertices){
queue.add(vertice);
}
我只是想用迭代器获取我想要的元素,将它从队列中删除,修改它,然后(如果我不想删除它的话)将它再次添加到队列中。这样行吗

我只是想用迭代器获取我想要的元素,将它从队列中删除,修改它,然后(如果我不想删除它的话)将它再次添加到队列中。这样行吗

它应该有用

事实上,考虑到您的数据结构选择,我想不出更好/更有效的方法

请注意,这种方法是
O(N)
,其中
N
是队列长度。在多线程上下文中,您可能需要在独占锁下执行整个序列,这可能会成为并发瓶颈



1-实际上,对于一些队列实现,添加(返回)当您迭代优先级队列时,元素可能会导致
ConcurrentModificationException
。如果这是一个问题,那么您可能需要列出需要重新插入的元素,然后在完成迭代后重新插入。javadocs似乎说
优先级队列
将给出CME的
PriorityBlockingQueue
不会。

你能给我们看看你的PQ实现吗?最大的问题可能是:它不起作用。我刚刚意识到我不能在为任何集合创建迭代器后添加元素。提示?提示:在完成迭代后再添加元素。