如果我有一个堆栈使用可变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)也会被更改。我想保留原始堆栈,那么我怎样才能获取内容而不是地址?
答案 0 :(得分:1)
你可以用来理解:
for( i <- stack1 ) { println(i) }
或只是调用foreach
方法:
stack1 foreach println
如果您坚持使用while
循环,则可以先将其转换为列表:
var is = stack1.toList
while( is.nonEmpty ) {
println( is.head )
is = is.tail
}
使用所有这些方法,将保留原始堆栈。