ArrayBufferとArrayの違いは何ですか?質問する

ArrayBufferとArrayの違いは何ですか?質問する

私は scala/java の初心者なので、この 2 つの違いを理解するのに苦労しています。

スカラを読むことでドキュメントArrayBufferインタラクティブに(追加、挿入、先頭に追加など)実行できるように作成されていることを理解しました。

1) 基本的な実装の違いは何ですか?

2) これら 2 つの間にパフォーマンスの違いはありますか?

ベストアンサー1

Arrayと は両方ともArrayBuffer変更可能です。つまり、特定のインデックスの要素を変更できます。a(i) = e

ArrayBufferはサイズ変更可能でArrayはありません。 に要素を追加するとArrayBuffer、 は大きくなります。 に要素を追加しようとするとArray、新しい配列が作成されます。したがって、Arrayを効率的に使用するには、事前にそのサイズを知っておく必要があります。

Arrayは JVM レベルで実装されており、消去されない唯一の汎用型です。つまり、オブジェクトのシーケンスを格納する最も効率的な方法であり、余分なメモリ オーバーヘッドがなく、一部の操作は単一の JVM オペコードとして実装されます。

ArrayBufferは内部的にを持ち、必要に応じて新しいものを割り当てることで実装されますArray。追加は通常は高速ですが、制限に達して配列のサイズが変更される場合は別です。ただし、全体的な影響は無視できるほど小さい方法で行われるため、心配する必要はありません。先頭への追加は、すべての要素を右に移動し、新しい要素を 0 番目の要素として設定することで実装されるため、低速です。追加ループ内の要素は効率的です()) の場合、先頭に付けるのは (²))。

Arrayは組み込み値型 ( を除くUnit) に特化されているため、 はArray[Int]よりもはるかに最適になりますArrayBuffer[Int]。値をボックス化する必要がないため、メモリ使用量と間接参照が少なくなります。この特化は、常に、型が単相である場合にのみ機能することに注意してください。つまり、 はArray[T]常にボックス化されます。

おすすめ記事