implicit val ord:Ordering[String] = Ordering.by(_.length)
var nameQueue = new PriorityQueue[String]()
nameQueue.+=("SINES","YINE","WIRAEUS")
nameQueue.foreach(println)
,输出为:
WIRAEUS
YINE
SINES
这似乎令人困惑。任何人都可以帮助解释排序的机制吗?
答案 0 :(得分:5)
来自PriorityQueue
ScalaDocs page。
只有 dequeue 和 dequeueAll 方法才会按优先级顺序返回元素(同时从堆中删除元素)。标准收集方法(包括 drop ,迭代器和 toString )将以最方便的顺序删除或遍历堆。
因此,打印 PriorityQueue 不会显示元素的优先顺序,但会先打印最高优先级的元素。