Scala: какой лучший способ добавить элемент в массив?

Скажем, у меня есть Array[Int] типа

val array = Array( 1, 2, 3 )

Теперь я хочу добавить элемент к массиву, скажем, значение 4, как в следующем примере:

val array2 = array + 4     // will not compile

Я, конечно, могу использовать System.arraycopy() и сделать это самостоятельно, но для этого должна быть библиотечная функция Scala, которую я просто не смог найти. Спасибо за любые подсказки!

Примечания:

  1. Я знаю, что могу добавить еще один массив элементов, как в следующей строке, но это кажется слишком округлым:

    val array2b = array ++ Array( 4 ) // это работает
    
  2. Я знаю о преимуществах и недостатках List vs Array, и здесь я по разным причинам конкретно заинтересован в расширении Array.

Edit 1

Спасибо за ответы, указывающие на метод оператора :+. Это то, что я искал. К сожалению, он работает медленнее, чем пользовательская реализация метода append() с использованием arraycopy - примерно в два-три раза медленнее. Если посмотреть на реализацию в SeqLike[], то создается билдер, затем в него добавляется массив, затем через билдер выполняется добавление, затем билдер рендерится. Не самая лучшая реализация для массивов. Я провел быстрый бенчмарк, сравнивая эти два метода, глядя на самое быстрое время из десяти циклов. Выполнение 10 миллионов повторений добавления одного элемента в 8-элементный массив экземпляра некоторого класса Foo занимает 3,1 секунды при использовании :+ и 1,7 секунды при использовании простого метода append(), который использует System. arraycopy(); выполнение 10 миллионов повторений добавления одного элемента в 8-элементные массивы Long занимает 2.1 секунды с :+ и 0.78 секунды с простым методом append(). Интересно, нельзя ли это исправить в библиотеке с помощью пользовательской реализации для Array?

Edit 2

Если уж на то пошло, я подал тикет: https://issues.scala-lang.org/browse/SI-5017

107
задан Chris Martin 19 December 2014 в 08:07
поделиться