Как настроить Scala PrioriryQueue для обработки дубликатов? - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть список заказов, которые нужно поместить в PriorityQueue [OrderQueue], цена используется для определения заказа, чем ниже цена, тем выше значение orderQueue. Каждый элемент PriorityQueue является OrderQueue, поэтому он может обрабатывать заказы с одинаковой ценой. Когда цена одинакова, тогда заказ должен быть добавлен в конец OrderQueue. Можно ли реализовать это с помощью стандартного PriorityQueue? Если нет, то нужно ли реализовывать кучу с нуля?

1 Ответ

0 голосов
/ 25 апреля 2020

Вместо этого вы можете использовать TreeMap. Он реализован в виде кучи, поэтому должен иметь те же характеристики производительности. Он поддерживает операции head и headOption с SortedMap и одновременно update.

type Price = Long
type Order = String
val queue = new mutable.TreeMap[Price, mutable.Queue[Order]]()
val subQueue: mutable.Queue[Order] = queue.getOrElseUpdate(100L, mutable.Queue.empty)
val highestPriority: Option[(Price, mutable.Queue[Order])] = queue.headOption
...