Seq для быстрого произвольного доступа и быстрого роста в Scala - PullRequest
4 голосов
/ 21 августа 2010

Какая будет лучшая коллекция Scala (в версии 2.8+), изменяемая или неизменная, для следующего сценария:

  • Последовательное упорядочение, поэтому я могу получить доступ к элементам по позиции (Seq)
  • Нужно часто вставлять предметы, чтобы коллекция могла расти без особых штрафов
  • Произвольный доступ, часто нужно удалять и вставлять элементы по произвольным индексам в коллекцию

В настоящее время у меня, похоже, хорошая производительность с изменяемым ArrayBuffer, но есть ли что-нибудь лучше? Есть ли незыблемая альтернатива, которая также подойдет? Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 21 августа 2010

Если вы вставляете элементы в случайных позициях больше, чем log (N) / N того времени, когда вы обращаетесь к ним, то вам, вероятно, следует использовать immutable.TreeSet, так как все операции O (log (N)).Если вы в основном делаете доступ или добавляете в (дальний) конец, ArrayBuffer и Vector работают хорошо.

4 голосов
/ 21 августа 2010

Изменчивый: ArrayBuffer
Неизменный: Vector

2 голосов
/ 21 августа 2010

Vector. IndSeq из скалаз должно быть еще лучше.

...