在Scala中高效检索ArrayStack的最后一个和倒数第二个元素?

时间:2015-06-09 15:32:56

标签: scala stack

我在Scala中使用了一个mutable ArrayStack但是不知道如何有效地(常量时间)访问最后一个元素(以及倒数第二个元素)而不从堆栈中弹出项目。是否可以访问元素?

2 个答案:

答案 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),它会在固定时间内返回最后一个元素。