Java 从ListBuffer中删除元素
根据,据说它允许固定时间去除第一个和最后一个元素。我一直在研究API引用和ListBuffer源代码,但我找不到如何在固定时间内删除最后一个元素,而Java 从ListBuffer中删除元素,java,scala,iterator,scala-collections,Java,Scala,Iterator,Scala Collections,根据,据说它允许固定时间去除第一个和最后一个元素。我一直在研究API引用和ListBuffer源代码,但我找不到如何在固定时间内删除最后一个元素,而remove(0)将为第一个元素完成工作。移除最后一个元素的正确方法是什么 另一个问题:在ListBuffer上迭代时是否可以有效地删除元素?在Java中,可以使用Iterator.remove()完成,但Scala迭代器似乎没有remove()方法……第一个问题有一个简单但令人失望的答案:不能在固定时间内删除最后一个元素,因为这样做需要在最后一个元
remove(0)
将为第一个元素完成工作。移除最后一个元素的正确方法是什么
另一个问题:在ListBuffer上迭代时是否可以有效地删除元素?在Java中,可以使用
Iterator.remove()
完成,但Scala迭代器似乎没有remove()
方法……第一个问题有一个简单但令人失望的答案:不能在固定时间内删除最后一个元素,因为这样做需要在最后一个元素之前引用该元素。(它是一个单链接列表,位于保存列表开头和结尾元素的包装器类中。)
第二个问题同样简单,也许令人失望:
Iterator
s在Scala中只是集合的视图。它们不会修改基础集合。(这与“默认情况下不可变,只有在必要时才可变”的理念保持一致。)您可以使用trimEnd(1)
删除最后一个元素,谢谢您的回答,Rex。所以基本上,从ListBuffer中删除任意元素总是需要O(n)个时间,不是吗?非常令人失望的是,即使迭代器指向一个特定的元素,也不可能立即删除它:(感谢您的回答,Olaf。但是trimEnd
似乎需要O(n)个时间。