2016-06-09 58 views
0

有沒有辦法刪除一個值小於指定值的scala優先級隊列中的所有項?刪除值小於x的PriorityQueue中的所有項目

例如。

val queue = scala.collection.mutable.PriorityQueue[Int]() 
queue.enqueue(3) 
queue.enqueue(5) 
queue.enqueue(10) 
queue.enqueue(8) 
queue.removeAllLessThan(6) 
println(queue) // PriorityQueue(10, 8) 

我知道你可以使用過濾器來做到這一點,但它似乎會有一個非常有效的方式在堆上做到這一點。

我想這樣做的原因是爲了保持A *算法的內存佔用低。

+1

刪除小於某個值的所有項目需要重建堆。我假設使用過濾器也會掃描堆以刪除不需要的項目,然後重新構建堆。所以我期望過濾器合理高效。 – user3386109

回答

1

PriorityQueue排序以插入爲主,即在確保排序的位置插入新元素。在這種情況下,使用默認的順序上Int(大於),

queue.takeWhile(_ > 6) 

迭代隊列而斷言,在與審視每一個項目的過濾器的對比度。

相關問題