gpt4 book ai didi

java - 优先队列中的删除

转载 作者:行者123 更新时间:2023-12-01 22:24:51 25 4
gpt4 key购买 nike

我有一个代码(Andorid),它迭代优先级队列并删除具有特定 ID 的所有条目。

但是,它仅删除第一个实例并跳过其余实例。例如,

(abc 1)(定义2)(吉3)(jkl 1)(mno 3)

如果给定的 id 为 1。它只会删除 abc,并且队列会重新组织并在其中留下 jkl。我也厌倦了迭代器,但没有用。

for(SomeMessage message : priorityQueue){

if(message.id == dead_sender.id){
priorityQueue.remove(message)
}

}

最佳答案

您无法在 for-each 循环中迭代集合并在执行此操作时从中删除元素。

您应该在迭代时为“要删除的项目”创建一个单独的集合。完成后,迭代这个新集合,从原始集合中删除每个项目。

类似于:

List<SomeMessage> toRemove = new ArrayList<>();
for(SomeMessage message : priorityQueue){

if(message.id == dead_sender.id){
toRemove.add(message);
}
}
for (SomeMessage message : toRemove) {
priorityQueue.remove(message)
}
<小时/>

但是请注意,删除优先级队列的任意元素(不是头部)是一项昂贵的任务(O(n)),如果这成为一个问题,您可能需要更改您的设计目的:

  1. 使用TreeSet或完全排序的数据结构
  2. 不要标记要删除的项目,而是标记要保留的项目 - 并且不要删除它们 - 使用这些项目构建一个新的 PriorityQueue。

关于java - 优先队列中的删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29005492/

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