Удаление элементов из ListBuffer

В соответствии с этой публикацией говорится, что ListBuffer позволяет удалять первый и последний элементы в постоянном времени. Я искал ссылку на API и исходный код ListBuffer, но не могу найти, как удалить последний элемент за постоянное время, пока remove(0) сделает работу для первого элемента. Каков будет правильный способ удалить последний элемент?

Другой вопрос: возможно ли эффективно удалить элемент при переборе ListBuffer? В Java это можно сделать с помощью Iterator.remove() но итератор Scala, похоже, не имеет remove() метод...

2 ответа

Решение

На первый вопрос есть простой, но неутешительный ответ: вы не можете удалить последний элемент за постоянное время, так как для этого потребуется ссылка на элемент before-last. (Это односвязный список внутри класса-обертки, который содержит начальный и конечный элементы списка.)

Второй вопрос одинаково прост и, возможно, неутешителен: IteratorS в Scala - просто взгляды на коллекцию. Они не изменяют основную коллекцию. (Это соответствует принципу "неизменяемый по умолчанию, изменяемый только при необходимости".)

Вы можете удалить последний элемент с trimEnd(1)

Другие вопросы по тегам