Неизменяемые конструкции
Scala List
- это неизменяемая рекурсивная структура данных, которая является настолько фундаментальной структурой в Scala, что вы должны (вероятно) использовать ее гораздо чаще, чем Array
(которая на самом деле изменяемая ) - неизменный аналог из Array
равен IndexedSeq
).
Если вы пришли из Java-фона, тогда очевидная параллель - это когда использовать LinkedList
вместо ArrayList
. Первый обычно используется для списков, которые когда-либо только обходятся (и размер которых неизвестен заранее), тогда как последний должен использоваться для списков, которые либо имеют известный размер (или максимальный размер), либо для которых быстрый произвольный доступ важен.
Изменяемые структуры
ListBuffer
обеспечивает преобразование в постоянное время в List
, что является единственной причиной для использования ListBuffer
, если требуется такое более позднее преобразование.
Scala Array
должен быть реализован в JVM с помощью массива Java, и, следовательно, Array[Int]
может быть гораздо более производительным (как int[]
), чем List[Int]
(который будет упаковывать его содержимое, если только Вы используете самые последние версии Scala с новой функцией @specialized
.
Тем не менее, я думаю, что использование Array
s в Scala должно быть сведено к минимуму, потому что кажется, что вам действительно нужно знать, что происходит под капотом, чтобы решить, будет ли ваш массив действительно поддерживаться требуемый тип примитива, или может быть упакован как тип оболочки.