-2

一般的に、配列とリストの違いについて質問しているわけではありません。このシナリオでの違いについて質問しているだけです。

私は1つのアレイを持っています。配列インデックスは動的な値で、1 つの整数リストがあります。

int DynamicValue=20 ;//It's any values should be coming from database or anywhere 

int[DynamicValue] array1=new int[DynamicValue];//Array declaration

List<int> list1=New List<int>();//List declaration 

ここでfor、Array と List に値を追加するループを1 つ作成します。

//最初に配列に値を追加します

for(i=0;i<DynamicValue;i++)
{
  array1[i]=i;
}

//次に、リストに値を追加します

for(i=0;i<DynamicValue;i++)
{
  list1.Add(i);
}

上記のコードの違いは何ですか?

私の質問は次のとおりです。

  1. 配列はタイプ セーフであり、インデックス サイズも定義されています。では、なぜ多くの人がこのシナリオでリストを好むのでしょうか? (ジェネリックコーディングに役立つことは知っていますが、このシナリオを求めています)
  2. 配列forループは、ボックス化とボックス化解除をまったく発生させていません。では、なぜ List が必要なのでしょうか?
  3. このシナリオでは、どのforループ (配列またはリスト) が最適ですか?
  4. どのforループが優れたパフォーマンスを発揮しますか (このコードはボックス化とボックス化解除を試行せず、このコードはタイプセーフであるため、両方のループが良いと思いますfor。しかし、現時点ではどちらが優れているかわかりません) ?
4

1 に答える 1

2

配列を作成するときは、サイズを指定します。リストを作成するときはそうしません (コンストラクターのオーバーロードで初期容量を提供できます)。

したがって、配列を作成するときは、20 個の int オブジェクトのサイズのメモリが必要であると言います。しかし、List を作成すると、int 用に予約されたサイズはありません。

List<int> list = new List<int>();
Console.WriteLine(list.Capacity);
//Output: 0

次に、ループを使用して項目を配列に追加すると、配列のサイズは 20 のままになります。しかし、リストにループを使用すると、リストに空きがないことがわかります。そのため、4 つのアイテム用のスペースが作成されます (チェック リスト。最初の追加後の容量)。容量がいっぱいになると、リストの容量が 2 倍になります。今は 8 です。それから再び 16、そして再び 32 です。最終的に、リストは 32 個の int オブジェクト用にメモリ内にスペースを確保しました。

配列は 20 個しか予約されていないため、合計で配列の方がメモリに関して優れています。

さらに、パフォーマンスに関しては、配列も少し高速です。私はこのSOの答えを参照しています: https://stackoverflow.com/a/454923/637425


あなたの質問のいくつかに対処するには:

  1. 多くの人は、インデックスを操作するのが好きではありません。非常に簡単に間違いを犯す可能性があります (特に初心者のプログラマーにとって)。インデックスはゼロベースなどです...しかし、単に呼び出すことができれば.Add()、インデックスについて心配する必要はありません。そのため、ほとんどの人が使用するのに少し便利ですList
  2. リストは必要ありません... 回答1を参照してください。
  3. 私の大きな話を見てください...配列はメモリに関して少し優れています。
  4. どちらも優れたパフォーマンスを発揮し、違いに気付くことはありません。より大きなリスト/配列を使い始めると、面白くなります。サイズが 20 の場合、パフォーマンスはあまり向上しません。
于 2013-10-22T12:19:49.400 に答える