Из того, что я тестировал, и чтение , Array
- самая быстрая коллекция, когда речь идет о произвольном доступе или итерации через foreach
, while
и tailrec
, но они изменчивыв отличие от Vector
, который, к сожалению, не так быстр, как Array
.
Я все еще застрял на Scala 2.11, но недавно я обнаружил, что в Scala 2.13 были внесены изменения.Есть ли надежда, что существует или будет существовать неизменная коллекция, которая превосходит Array
в плане произвольного доступа?
Вот пример евклидова расстояния на Array[Double]
, он работает точно так же на потомках Seq.
final def euclidean(v1: Array[Double], v2: Array[Double]): Double = {
@annotation.tailrec
def go(d: Double, i: Int): Double = {
if(i < v1.size) {
val toPow2 = v1(i) - v2(i)
go(d + toPow2 * toPow2, i + 1)
}
else d
}
sqrt(go(0D, 0))
}