Scala是否有类似Java Deque或Python deque的双端队列?
Scala中的双端队列实现确认
嗨,别担心,Scala 2.12里确实存在和Java Deque、Python deque功能一致的双端队列,只是它的入口可能没那么显眼,我给你拆解说明:
1. 可变双端队列:ArrayDeque
这是最常用的实现,对应Java的ArrayDeque和Python的deque,属于scala.collection.mutable包下,支持在队列的首尾高效添加、删除元素。
举个简单的使用例子:
import scala.collection.mutable.ArrayDeque val deque = ArrayDeque(1, 2, 3) deque.addFirst(0) // 队首添加元素,现在队列是 [0,1,2,3] deque.addLast(4) // 队尾添加元素,现在队列是 [0,1,2,3,4] val first = deque.removeFirst() // 取出队首元素0 val last = deque.removeLast() // 取出队尾元素4
另外,scala.collection.mutable.Deque是一个 trait,ArrayDeque是它的具体实现类,你也可以直接用Deque来声明变量:
import scala.collection.mutable.Deque val deque: Deque[Int] = ArrayDeque(1,2,3)
2. 不可变双端队列:immutable.Deque
如果你的场景需要不可变的数据结构(符合Scala函数式编程的习惯),Scala 2.12也提供了scala.collection.immutable.Deque,它的操作会返回一个新的队列,而不是修改原队列:
import scala.collection.immutable.Deque val deque = Deque(1,2,3) val newDeque = deque.prepend(0).append(4) // 新队列是 [0,1,2,3,4],原队列不变
为什么你只看到Stack和Queue?
Stack和Queue是更通用的线性集合抽象:
Stack是后进先出(LIFO)的结构Queue是先进先出(FIFO)的结构
而双端队列(Deque)同时支持这两种操作模式,属于更具体的细分实现,所以在API文档里需要找Deque相关的条目,而不是只看Stack和Queue。
内容的提问来源于stack exchange,提问作者CSY
相关产品推荐
相关产品推荐

