Подтвердить что ты не робот

Какой scala измененный список использовать?

Это дополнительный вопрос к изменяемому списку No Scala

Я хочу использовать изменяемый список в Scala. Я могу выбрать из

Что хорошо, но каков "стандартный", рекомендуемый, идиоматический способ скалы? Я просто хочу использовать список, к которому я могу добавить вещи на обороте.

В моем случае я использую HashMap, где "списки" (я имею в виду это в общем смысле) будут на стороне значения. Затем я читаю что-то из файла и для каждой строки хочу найти правильный список в хэш-карте и добавить значение в список.

4b9b3361

Ответ 1

Для читателей, которые посещают этот старый вопрос: в разделе документации Конкретные сборные классы классов содержится обзор изменчивых классов списка, включая объяснения, когда использовать какой.

Ответ 2

Зависит от того, что вам нужно.

DoubleLinkedList - связанный список, который позволяет вам перемещаться назад и вперед через список узлов. Используйте ссылки prev и next для перехода к предыдущему или следующему node, соответственно.

LinkedList является односвязным списком, поэтому нет указателей prev - если вы все время переходите к следующему элементу списка, это то, что вам нужно.

РЕДАКТИРОВАТЬ: Обратите внимание, что два вышеупомянутых предполагается использовать внутри как строительные блоки для более сложных структур списка, таких как MutableList, которые поддерживают эффективное добавление, и mutable.Queue s.

В двух сборках, приведенных выше, есть операции добавления в виде линейного времени.

ListBuffer - класс буфера. Несмотря на то, что он поддерживается структурой данных с одиночной привязкой, он не отображает указатель next для клиента, поэтому вы можете перемещаться только с помощью итераторов и foreach. Его основное использование, однако, является буфером и непременным редактором списков - вы добавляете к нему элементы через +=, а когда вы вызываете result, вы очень эффективно возвращаете функциональный immutable.List. В отличие от изменяемых и неизменяемых списков, операции append и prepend являются постоянными - вы можете добавить в конце через += очень эффективно.

MutableList используется внутренне, вы обычно не используете его, если только вы не планируете внедрять собственный класс коллекций на основе структуры данных с одиночной привязкой. Переменные очереди, например, наследуют этот класс. Класс MutableList также имеет эффективную операцию добавления константы времени, поскольку он поддерживает ссылку на последний node в списке.

Ответ 3

Если вы хотите добавить элементы, вы не должны использовать List вообще. List хороши, если вы хотите добавить элементы. Вместо этого используйте ArrayBuffer.

Ответ 4

Я просто хочу использовать список, который я могу добавить на него.

Затем выберите то, что реализует Growable. Я лично предлагаю одну из реализаций Buffer.

Я держусь в стороне от LinkedList и DoubleLinkedList, поскольку они присутствуют главным образом в качестве основной реализации других коллекций, но имеют довольно много ошибок до Scala 2.9.x. Начиная с Scala 2.10.0, я ожидаю, что различные исправления ошибок приведут их к стандартному. Тем не менее, им не хватает ожидаемых методов, например +=, которые вы найдете в коллекциях на их основе.