【问题标题】:Removing elements from ListBuffer从 ListBuffer 中删除元素
【发布时间】:2012-10-07 00:05:11
【问题描述】:

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

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

【问题讨论】:

    标签: java scala iterator scala-collections


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答,雷克斯。所以基本上从 ListBuffer 中删除任意元素总是需要 O(n) 的时间,不是吗?令人失望的是,即使使用指向特定元素的迭代器也无法立即将其删除:(
    【解决方案2】:

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

    【讨论】:

    • 感谢奥拉夫的回答。但似乎trimEnd 需要 O(n) 时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    相关资源
    最近更新 更多