从ListBuffer中删除元素

时间:2012-10-16 19:46:06

标签: java scala iterator scala-collections

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

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

2 个答案:

答案 0 :(得分:1)

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

第二个问题同样容易,也许令人失望:Scala中的Iterator只是对集合的看法。它们不会修改基础集合。 (这与“默认不可变,只在必要时可变”哲学一致。)

答案 1 :(得分:1)

您可以使用trimEnd(1)

删除最后一个元素