You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:39:07