Scala 中排序的订单集合
Sorted collection of orders in Scala
我需要维护一个排序的订单集合,格式为...
Order(id: Long, price: Long, quantity: Long)
...其中 order.price
是定义集合顺序的变量。我还需要查找 order.id
的 order
并将其从集合中删除。
我最初尝试了 mutable.PriorityQueue
,但不知道如何查找和删除订单。然后我转到 immutable.TreeSet
,但 TreeSet
考虑了具有相同价格 duplicates
的订单并放弃了其中一个。我曾考虑过使用 immutable.TreeMap
,但该集合对键进行排序,而我的订单的自然键是 id
而不是 price
。
我应该使用什么集合?理想的集合似乎是一个 Map,其中排序顺序是通过键定义的。据我所知,这不存在。
我相信没有完全符合您提到的功能的集合。
您或许可以继承 java 的 LinkedHashMap。它使项可以通过键访问,但保留内部节点的链表以具有稳定的排序。该实现使用插入顺序(最有效,因为您只需附加到底层链表),但您可以自定义它以根据自定义比较器在喜欢的列表上进行插入(因此插入将是 O(n))。希望对您有所帮助!
我需要维护一个排序的订单集合,格式为...
Order(id: Long, price: Long, quantity: Long)
...其中 order.price
是定义集合顺序的变量。我还需要查找 order.id
的 order
并将其从集合中删除。
我最初尝试了 mutable.PriorityQueue
,但不知道如何查找和删除订单。然后我转到 immutable.TreeSet
,但 TreeSet
考虑了具有相同价格 duplicates
的订单并放弃了其中一个。我曾考虑过使用 immutable.TreeMap
,但该集合对键进行排序,而我的订单的自然键是 id
而不是 price
。
我应该使用什么集合?理想的集合似乎是一个 Map,其中排序顺序是通过键定义的。据我所知,这不存在。
我相信没有完全符合您提到的功能的集合。
您或许可以继承 java 的 LinkedHashMap。它使项可以通过键访问,但保留内部节点的链表以具有稳定的排序。该实现使用插入顺序(最有效,因为您只需附加到底层链表),但您可以自定义它以根据自定义比较器在喜欢的列表上进行插入(因此插入将是 O(n))。希望对您有所帮助!