在 Scala 中高效检索 ArrayStack 的最后一个和倒数第二个元素?
Efficient retrieval of last and second to last element of ArrayStack in Scala?
我在 Scala 中使用可变 ArrayStack
但不知道如何在不从堆栈中弹出项目的情况下有效地(恒定时间)访问最后一个元素(和倒数第二个元素)。是否可以访问元素?
stack(4) // returns 5th element
stack.last // returns last element
这些操作是常数时间。
stack(4)
returns常数时间内的第5个元素
至于最后一个元素 - 答案取决于您使用的是哪个版本。 Scala 2.11.7 在线性时间上仍然是 运行 stack.last
,因为它使用 TraversableLike
实现:
def last: A = {
var lst = head
for (x <- this)
lst = x
lst
}
这是 fixed 在版本 2.12.0-M4 中使用 IndexedSeqOptimized
特性。
因此,据我了解-如果您使用的是旧版本的 Scala(问题发布时就是这种情况),您应该使用 stack(stack.size - 1)
其中 returns 恒定时间的最后一个元素。
我在 Scala 中使用可变 ArrayStack
但不知道如何在不从堆栈中弹出项目的情况下有效地(恒定时间)访问最后一个元素(和倒数第二个元素)。是否可以访问元素?
stack(4) // returns 5th element
stack.last // returns last element
这些操作是常数时间。
stack(4)
returns常数时间内的第5个元素
至于最后一个元素 - 答案取决于您使用的是哪个版本。 Scala 2.11.7 在线性时间上仍然是 运行 stack.last
,因为它使用 TraversableLike
实现:
def last: A = {
var lst = head
for (x <- this)
lst = x
lst
}
这是 fixed 在版本 2.12.0-M4 中使用 IndexedSeqOptimized
特性。
因此,据我了解-如果您使用的是旧版本的 Scala(问题发布时就是这种情况),您应该使用 stack(stack.size - 1)
其中 returns 恒定时间的最后一个元素。