Удаление элементов из ListBuffer
В соответствии с этой публикацией говорится, что ListBuffer позволяет удалять первый и последний элементы в постоянном времени. Я искал ссылку на API и исходный код ListBuffer, но не могу найти, как удалить последний элемент за постоянное время, пока remove(0)
сделает работу для первого элемента. Каков будет правильный способ удалить последний элемент?
Другой вопрос: возможно ли эффективно удалить элемент при переборе ListBuffer? В Java это можно сделать с помощью Iterator.remove()
но итератор Scala, похоже, не имеет remove()
метод...
2 ответа
На первый вопрос есть простой, но неутешительный ответ: вы не можете удалить последний элемент за постоянное время, так как для этого потребуется ссылка на элемент before-last. (Это односвязный список внутри класса-обертки, который содержит начальный и конечный элементы списка.)
Второй вопрос одинаково прост и, возможно, неутешителен: Iterator
S в Scala - просто взгляды на коллекцию. Они не изменяют основную коллекцию. (Это соответствует принципу "неизменяемый по умолчанию, изменяемый только при необходимости".)