web-dev-qa-db-ja.com

Array、ArrayList、Listの違いは何ですか?

ArrayArrayListList(それらはすべて同様の概念を持っているので)とどこで使用するかとの正確な違いは何なのかと思います上下に。

例:

配列
Arrayの場合、この例で宣言するタイプintのみを追加できます。

int[] Array = new Int[5]; //Instansiation of an array
for(int i = 0; i < Array.Length; i++)
{
   Array[i] = i + 5; //Add values to each array index
}

ArrayList
Arrayのように値を追加できます

ArrayList arrayList = new ArrayList();
arrayList.Add(6);
arrayList.Add(8);

リスト
ここでもArrayのように値を追加できます

List<int> list = new List<int>();
list.Add(6);
List.Add(8);

Listでジェネリック型を使用できるため、Arrayで実行できない型を渡すことができますが、正確な質問は次のとおりです。

  • どちらを使用するのですか?
  • 3つの機能の正確な違いは?
27
kCC

それらは異なるオブジェクトタイプです。それらは異なる機能を持ち、異なる方法でデータを保存します。同様に、小数とDateTimeの違いを尋ねることができます。

配列(System.Array)は、割り当てられるとサイズが固定されます。アイテムを追加したり、アイテムを削除したりすることはできません。また、すべての要素は同じタイプでなければなりません。その結果、タイプセーフであり、メモリとパフォーマンスの両方の面で3つの中で最も効率的です。また、System.Arrayは複数のディメンションをサポートしています(つまり、 Rank プロパティがあります)が、ListとArrayListはサポートしていません(ただし、必要に応じてListのListまたはArrayListのArrayListを作成できます)。

ArrayListは、オブジェクトのリストを含む柔軟な配列です。アイテムを追加および削除でき、スペースの割り当てを自動的に処理します。値型を格納する場合、それらはボックス化およびボックス化解除されるため、少し非効率的です。また、タイプセーフではありません。

List<>ジェネリックを活用します。これは、本質的にArrayListのタイプセーフバージョンです。これは、ボックス化またはボックス化解除(パフォーマンスの向上)がなく、間違ったタイプのアイテムを追加しようとすると、コンパイル時エラーが生成されることを意味します。

55
John Wu