私がArray[Int]好きだと言う
val array = Array( 1, 2, 3 )
4次の例のように、配列に要素、たとえばvalueを追加したいと思います。
val array2 = array + 4 // will not compile
もちろんSystem.arraycopy()自分で使用してこれを行うこともできますが、これにはScalaライブラリー関数が必要です。ポインタをありがとう!
ノート:
次の行のように、要素の別の配列を追加できることは承知していますが、それはあまりにも回りすぎに見えます。
val array2b = array ++ Array( 4 ) // this worksListとArrayの長所と短所を認識しており、ここでは特にArrayの拡張に関心があるさまざまな理由があります。
編集1
:+演算子メソッドを指している答えをありがとう。これは私が探していたものです。残念ながら、これは、カスタムのappend()メソッドの実装よりもかなり遅く、arraycopy約2〜3倍遅くなります。の実装を見ると、SeqLike[]ビルダーが作成され、配列が追加され、ビルダーを介して追加が行われ、ビルダーがレンダリングされます。配列の適切な実装ではありません。2つの方法を比較する簡単なベンチマークを行い、10サイクルのうち最も速い時間を調べました。あるクラスの8要素の配列インスタンスに単一項目の追加を1,000万回繰り返すと、を使用する単純なメソッドでFoo3.1秒:+、1.7秒かかりappend()ます。System.arraycopy();Longの8要素の配列で1000万の単一項目の追加の繰り返しを行う:+と、単純なappend()方法では2.1秒、0.78秒かかります。これをカスタム実装のライブラリで修正できなかったのではないArrayでしょうか。
編集2
それが価値があるもののために、私はチケットを提出しました:https: //issues.scala-lang.org/browse/SI-5017
System.arraycopy(...)ものに置き換えられますArray.copy(...)
ArrayBufferた後、変換された最後のアレイに追加する(としますかtoArray)?
ArrayBufferその+=方法を使わないのですか?これにより、償却後のO(1)が追加されます。