一、Queue队列
在 Scala 中,Queue 是一种先进先出(FIFO)的集合类型,用于存储一组元素。Scala 提供了可变(Mutable)Queue 和不可变(Immutable)Queue 两种类型。
1、可变队列
可变 Queue 具有添加和删除元素的能力,并且可以原地修改 Queue。可变 Queue 的类位于 scala.collection.mutable
包下。
示例使用可变 Queue:
import scala.collection.mutable.Queue
// 创建可变 Queue
val mutableQueue = Queue(1, 2, 3)
// 添加元素
mutableQueue.enqueue(4)
mutableQueue += 5
println(mutableQueue) // 输出:Queue(1, 2, 3, 4, 5)
// 删除元素
val first_value = mutableQueue.dequeue
// 输出可变 Queue
println(mutableQueue) // 输出:Queue(2, 3, 4, 5)
2、不可变队列
不可变 Queue 是不可更改的,一旦创建后,就不能修改它们。要添加或删除元素,会返回一个新的 Queue。不可变 Queue 的类位于 scala.collection.immutable
包下。
示例使用不可变 Queue:
// 创建不可变 Queue
val immutableQueue = Queue(1, 2, 3)
// 添加元素(会返回一个新的 Queue)
val newImmutableQueue = immutableQueue.enqueue(4)
println(newImmutableQueue) // 输出:Queue(1, 2, 3, 4)
// 删除元素(会返回一个新的 Queue)
val (first_value, newerImmutableQueue) = newImmutableQueue.dequeue
// 输出原始不可变 Queue 和新的 Queue
println(immutableQueue) // 输出:Queue(1, 2, 3)
println(newerImmutableQueue) // 输出:Queue(2, 3, 4)
注意:在 Scala 中,强烈推荐使用不可变集合类型,包括不可变 Queue。不可变集合具有更好的线程安全性和函数式编程特性,可以避免在多线程环境下出现竞态条件和数据共享问题。可变集合更适用于一些特定的场景,如性能要求较高且并发需求较低的情况。在大多数情况下,应该优先使用不可变集合。
二、Stack栈
在 Scala 中,栈(Stack)是一种后进先出(LIFO)的集合类型,用于存储一组元素。Scala 提供了可变(Mutable)Stack 和不可变(Immutable)Stack 两种类型。
1、可变栈
可变 Stack 具有添加、删除和更新元素的能力,并且可以原地修改 Stack。可变 Stack 的类位于 scala.collection.mutable
包下。
示例使用可变 Stack:
import scala.collection.mutable.Stack
// 创建可变 Stack
val mutableStack = Stack(1, 2, 3)
// 添加元素
mutableStack.push(4)
mutableStack.push(5)
// 删除元素
val removedElement = mutableStack.pop()
// 输出可变 Stack
println(mutableStack) // 输出:Stack(4, 3, 2, 1)
2、不可变栈
不可变 Stack 是不可更改的,一旦创建后,就不能修改它们。要添加或删除元素,会返回一个新的 Stack。不可变 Stack 的类位于 scala.collection.immutable
包下。
示例使用不可变 Stack:
// 创建不可变 Stack
val immutableStack = scala.collection.immutable.Stack(1, 2, 3)
// 添加元素(会返回一个新的 Stack)
val newImmutableStack = immutableStack.push(4)
// 删除元素(会返回一个新的 Stack)
val newerImmutableStack = newImmutableStack.pop
// 输出原始不可变 Stack 和新的 Stack
println(immutableStack) // 输出:Stack(1, 2, 3)
println(newerImmutableStack) // 输出:Stack(1, 2, 3)
注意:在 Scala 中,强烈推荐使用不可变集合类型,包括不可变 Stack。不可变集合具有更好的线程安全性和函数式编程特性,可以避免在多线程环境下出现竞态条件和数据共享问题。可变集合更适用于一些特定的场景,如性能要求较高且并发需求较低的情况。在大多数情况下,应该优先使用不可变集合。