4

根据这个帖子,据说ListBuffer允许恒定时间删除第一个和最后一个元素。我一直在研究 API 参考和 ListBuffer 源代码,但我找不到如何在恒定时间内删除最后一个元素,同时remove(0)为第一个元素完成这项工作。删除最后一个元素的正确方法是什么?

另一个问题:是否可以在迭代 ListBuffer 时有效地删除元素?在 Java 中它可以完成,Iterator.remove()但 Scala 迭代器似乎没有该remove()方法......

4

2 回答 2

1

第一个问题有一个简单但令人失望的答案:您不能在恒定时间内删除最后一个元素,因为这样做需要引用最后一个元素。(它是一个单链表,在一个包含列表开始和结束元素的包装类中。)

第二个问题同样简单,也许令人失望:IteratorScala 中的 s 只是集合的视图。他们不会修改基础集合。(这符合“默认情况下不可变,仅在必要时可变”的理念。)

于 2012-10-16T19:56:34.327 回答
1

您可以删除最后一个元素trimEnd(1)

于 2012-10-16T19:56:40.633 回答