16

重複の可能性:
C# で array[] に対して ArrayList を使用するのはいつですか?

メモリまたはプロセッサのコストの観点から、配列と arrayList オブジェクトの間に大きな違いがあるように見えますか?

4

2 に答える 2

7

配列は、基本的にメモリ内の領域にマップされる低レベルのデータ構造です。Anは、リストが大きくなるにつれて再割り当てさArrayListれる の配列として実装される可変長リストです。object

ArrayListしたがって、内部配列のサイズの管理に関連するオーバーヘッドと、リストにアクセスするときにオブジェクトを正しい型にキャストすることに関連するオーバーヘッドがあります。

また、すべてを as として保存するobjectと、値の型が書き込み時にボックス化され、読み取り時にボックス化されなくなり、パフォーマンスに非常に悪影響を及ぼします。List<T>類似しているが強く型付けされた可変サイズ リストであるを使用すると、この問題を回避できます。

実際、.NET 2.0 以降ArrayListを支持して実質的に廃止されています。List<T>

于 2012-05-25T01:35:14.807 に答える
1

配列は、固定サイズのメモリの連続したブロックですが、ArrayList (ただし、.NET 2.0 以降は List を使用する必要があります) は配列をラップして、動的にサイズ変更可能なストレージを提供します。

それらの間の「違い」は、それらがカプセル化されている限り、ArrayList はサイズ変更可能ですが、配列はそうではありません。実装に関する限り: ArrayList は配列をラップ (および再割り当て) するため、配列よりもわずかに多くのメモリが必要になります (容量ではなく現在の要素数を知る必要があるため)、さらに ArrayList も内部容量に達した場合、内部配列の再割り当てとコピーに CPU 時間を必要とします。

ただし、ArrayList のインスタンス化は、配列の割り当てよりも高価ではありません。唯一の違いは、ArrayList の状態を初期化するために必要な命令がいくつかあることです。違いはごくわずかであり、心配する価値はありません。

サイズ変更可能なコレクションを作成する手段として自分で配列を再割り当てする場合は、十分にテストされている ArrayList/List を使用する方がよいことがわかります。

于 2012-05-25T01:36:04.997 に答える