私が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 works
ListとArrayの長所と短所を認識しており、ここでは特にArrayの拡張に関心があるさまざまな理由があります。
編集1
:+
演算子メソッドを指している答えをありがとう。これは私が探していたものです。残念ながら、これは、カスタムのappend()メソッドの実装よりもかなり遅く、arraycopy
約2〜3倍遅くなります。の実装を見ると、SeqLike[]
ビルダーが作成され、配列が追加され、ビルダーを介して追加が行われ、ビルダーがレンダリングされます。配列の適切な実装ではありません。2つの方法を比較する簡単なベンチマークを行い、10サイクルのうち最も速い時間を調べました。あるクラスの8要素の配列インスタンスに単一項目の追加を1,000万回繰り返すと、を使用する単純なメソッドでFoo
3.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)が追加されます。