以前書きましたGeneric型のList<int>はArrayListよりも遅いのか?の計測結果が間違っていました。
コメントにて指摘していただいた通り、GenericなListの方がArrayListより早かったです。
計測方法が間違ってるよ。
ElapsedMilliseconds プロパティは経過時間の合計を取得するものだから、正しく計測するには2つめの sw.Start() の前に sw.Reset() を追加する必要があるよ。
だから、この例だとGenericなListの処理にかかった時間はArrayListより少ないはず。
通りすがり
結果はArrayListが1905msでListが559msでした。
ちなみに修正版のコードは以下の通りです。
class Test {
const int trial_count = 10000000;
const int array_size = 1000000;
const int value_max = 1000;
public Test() {
System.
Diagnostics.
Stopwatch sw =
new System.
Diagnostics.
Stopwatch();
Random rand =
new Random
();
//ArrayListでの測定
ArrayList array =
new ArrayList
();
for (int j = 0; j < array_size; j++) {
array.Add(rand.Next(value_max));
}
sw.Start();
for (int j = 0; j < trial_count; j++) {
int k = (int)array[rand.Next(array_size)];
}
sw.Stop();
Console.WriteLine("ArrayList:" + sw.ElapsedMilliseconds);
//******************************************
sw.Reset(); //追加
//******************************************
//List<int>での測定
List<int> array2 =
new List<int>
();
for (int j = 0; j < array_size; j++) {
array2.Add(rand.Next(value_max));
}
sw.Start();
for (int j = 0; j < trial_count; j++) {
int k = array2[rand.Next(array_size)];
}
sw.Stop();
Console.WriteLine("List<int>:" + sw.ElapsedMilliseconds);
}
}
ブログ上にコードを公開していなかったら指摘していただけず、私の理解はArrayListからint型にキャストした方が約3割弱早いという間違った理解のままだったかと思います。
ご指摘ありがとうございました。