Scala 是否可以有两个优先级队列;同步“;在斯卡拉?

Scala 是否可以有两个优先级队列;同步“;在斯卡拉?,scala,scala-2.8,priority-queue,deque,Scala,Scala 2.8,Priority Queue,Deque,我有一组具有两种优先级的对象。 我可以创建两个PriorityQueue,每个队列按顺序排列。 问题是,当我从其中一个元素中退出队列时,它显然不会从另一个元素中消失 是否可以“同步”创建两个队列,这样当从一个队列中删除元素时,它将从另一个队列中删除?这保证了一种特殊的数据结构。标准库中可用的标准“引擎盖下的二进制堆”优先级队列无法完成此任务,因为它不知道所需元素在另一个二进制堆中的“位置” 当您尝试实现Dijkstra算法或A*时,也会出现类似的问题。这里的诀窍是使用两个有序的树,就像它们是队列

我有一组具有两种优先级的对象。 我可以创建两个PriorityQueue,每个队列按顺序排列。 问题是,当我从其中一个元素中退出队列时,它显然不会从另一个元素中消失


是否可以“同步”创建两个队列,这样当从一个队列中删除元素时,它将从另一个队列中删除?

这保证了一种特殊的数据结构。标准库中可用的标准“引擎盖下的二进制堆”优先级队列无法完成此任务,因为它不知道所需元素在另一个二进制堆中的“位置”


当您尝试实现Dijkstra算法或A*时,也会出现类似的问题。这里的诀窍是使用两个有序的树,就像它们是队列一样——你可以弹出第一个元素,然后在另一个树中搜索它。

如果你不需要对数运算,就使用as queues。他们不保证先进先出,但提供你需要的


您可以轻松地将其中两个封装在一个类中。

这看起来是ScalaSTM的一个很好的用例。我不想涉及任何并发性。这只是基于类名的猜测,但可能
SynchronizedPriorityQueue
可以做到这一点?当您说不想涉及任何并发性时,你的意思是不需要从多个线程使用它吗?我的程序是单线程的。我需要的是一种从优先级队列中删除非顶层元素的方法。我不必那么高效。我只需要一种从优先级队列中删除非顶层元素的方法。当然,如果您的意思是-通过优先级队列线性搜索元素,然后删除它(O(n)),那么将其添加到API中可能是有意义的。也许申请一张罚单。