2012-10-16 124 views
4

根據this posting,據說ListBuffer允許第一個和最後一個元素的恆定時間移除。我一直在尋找API參考和ListBuffer源代碼,但我無法找到如何在恆定時間內移除最後一個元素,而remove(0)將爲第一個元素完成這項工作。什麼是刪除最後一個元素的正確方法?從ListBuffer中移除元素

另一個問題:是否有可能在迭代ListBuffer時有效地移除元素?在Java中,它可以用Iterator.remove()完成,但Scala迭代器似乎沒有remove()方法...

回答

1

第一個問題有一個簡單的,如果令人失望的答案:你不能在常量時間內刪除最後一個元素,因爲這樣做需要參考前一個元素。 (這是一個單獨鏈接的列表,位於包含列表的開始和結束元素的包裝類中)。

第二個問題同樣簡單,也許令人失望:斯卡拉中的Iterator只是對集合的看法。他們不修改基礎集合。 (這是與「默認不可改變的,可變的只在必要時」的理念是一致的。)

+0

感謝您的回答,雷克斯刪除最後一個元素。所以基本上它總是需要O(n)時間從ListBuffer中移除一個任意元素,不是嗎?這很令人失望,即使使用指向特定元素的迭代器,也不可能馬上刪除它:( –

1

您可以trimEnd(1)

+0

感謝您的答案,Olaf。但似乎'trimEnd'花費了O(n)時間。 –