Скажем, у меня есть Array[Int]
как
val array = Array( 1, 2, 3 )
Теперь я хотел бы добавить элемент в массив, скажем, значение 4
, как в следующем примере:
val array2 = array + 4 // will not compile
Я могу, конечно, использовать System.arraycopy()
и делать это самостоятельно, но для этого должна быть функция библиотеки Scala, которую я просто не мог найти. Спасибо за любые указатели!
Примечания:
-
Я знаю, что я могу добавить другой массив элементов, как в следующей строке, но это кажется слишком круглым:
val array2b = array ++ Array( 4 ) // this works
-
Я знаю о преимуществах и недостатках List vs Array, и здесь я по разным причинам специально заинтересован в расширении массива.
Изменить 1
Спасибо за ответы, указывающие на метод оператора :+
. Это то, что я искал. К сожалению, он медленнее, чем реализация специального метода append(), используя arraycopy
- примерно в два-три раза медленнее. Глядя на реализацию в SeqLike[]
, создается строитель, затем массив добавляется к нему, затем добавление выполняется через построитель, затем создается визуализатор. Не очень хорошая реализация для массивов. Я сделал быстрый тест, сравнивающий два метода, глядя на самое быстрое время из десяти циклов. Выполнение 10 миллионов повторений одного элемента, добавляемого к экземпляру массива из 8 элементов какого-либо класса Foo
, занимает 3,1 секунды с :+
и 1,7 с с помощью простого метода append()
, который использует System.arraycopy();
item append повторения на 8-элементных массивах Long занимает 2,1 с с :+
и 0,78 с простым методом append()
. Интересно, не удалось ли это исправлять в библиотеке с помощью специальной реализации для Array
?
Изменить 2
Для чего это стоило, я подал билет: https://issues.scala-lang.org/browse/SI-5017