我想使用immutable.Queue
,特别是
我想在不将其出列的情况下访问队列的头部。使用两个不可变列表/堆栈来实现不可变队列,并且从代码看起来这个操作不是恒定时间(参见此line),尽管dequeue是(摊销的常量时间)。有人可以确认或纠正我吗?
我喜欢List
的模式匹配语法(例如list match { case head :: tail => ... }
)。我们对Queue
也有类似的东西吗?
答案 0 :(得分:9)
您可以在+:
上使用通用匹配器Seq
:
val q = Queue.empty[Int]
q match {
case x +: xs => // non-empty case
case _ => // empty case
}
您还可以使用Queue
' s unapplySeq
:
q match {
case Queue(x, _*) => // non-empty case
case Queue() => // empty case
}
请注意,这两者都可能比Queue.head
效率更低,因为它们也必须构造出队队列,在摊销时间内只有O(1)
。