1

如果我有一个使用可变 scala 堆栈集合的堆栈,有没有办法可以复制堆栈,以便我可以通过弹出它来分析它的元素而不改变原始堆栈?例如,假设我有一个堆栈和代码如下:

import scala.collection.mutable.Stack
var stack1 = new Stack[Int]
/** Code that pushes integers on stack1*/
var stackCopy = stack1
while (!stackCopy.isEmpty) {
    println(stackCopy.pop)
}

我想使用一个while循环来打印stack1中的所有元素。但是当我制作一个副本并弹出该副本时,原始堆栈(即stack1)也被更改了。我想保留原始堆栈,那么我怎样才能获取内容,而不是地址?

4

1 回答 1

1

您可以用于理解:

for( i <- stack1 ) { println(i) }

或简单地调用该foreach方法:

stack1 foreach println

如果您坚持使用while循环,您可以先将其转换为列表:

var is = stack1.toList
while( is.nonEmpty ) {
  println( is.head )
  is = is.tail
}

使用所有这些方法,原始堆栈将被保留。

于 2012-04-30T17:54:32.857 回答