我在Scala中使用了一个mutable ArrayStack
但是不知道如何有效地(常量时间)访问最后一个元素(以及倒数第二个元素)而不从堆栈中弹出项目。是否可以访问元素?
答案 0 :(得分:2)
stack(4) // returns 5th element
stack.last // returns last element
这些操作是恒定时间。
答案 1 :(得分:0)
stack(4)
在常量时间内返回第5个元素
至于最后一个元素 - 答案取决于您使用的版本。在使用stack.last
实现时,Scala 2.11.7在线性时间内仍在运行TraversableLike
:
def last: A = {
var lst = head
for (x <- this)
lst = x
lst
}
使用IndexedSeqOptimized
特征在版本2.12.0-M4中为fixed。
因此,根据我的理解 - 如果您使用旧版本的Scala(问题发布时就是这种情况),您应该使用stack(stack.size - 1)
,它会在固定时间内返回最后一个元素。