線形探索

/****************************/
/* 線形探索                 */
/*      coded by Y.Suganuma */
/****************************/
import java.io.*;
import java.util.*;
					// 探索
class Search
{
	long tm1, tm2, tm3;
							// 配列と線形探索
	void linear()
	{
		int i1, i2, k, n = 0, ct = 0;
		int data[] = new int [5000000], s[] = new int [100000];
		Random rn = new Random(12345);

		tm1 = System.currentTimeMillis();
		for (i1 = 0; i1 < 5000000; i1++) {
			k        = rn.nextInt();
			data[i1] = k;
			ct++;
			if (i1%50 == 0 && n < 100000) {
				s[n] = k;
				n++;
			}
		}
		tm2 = System.currentTimeMillis();
		System.out.printf("   保存: %d ms\n", tm2-tm1);
		for (i1 = 0; i1 < n; i1++) {
			for (i2 = 0; i2 < 5000000; i2++) {
				if (data[i2] == s[i1])
					break;
			}
		}
		tm3 = System.currentTimeMillis();
		System.out.printf("   探索: %d ms\n", tm3-tm2);
		System.out.printf("   データ数: %d\n", ct);
	}
							// ArrayListと線形探索
	void linear_v()
	{
		int i1, k, n = 0, ct = 0, s[] = new int [100000];
		Random rn = new Random(12345);
		ArrayList<Integer> data = new ArrayList <Integer> ();

		tm1 = System.currentTimeMillis();
		for (i1 = 0; i1 < 5000000; i1++) {
			k = rn.nextInt();
			data.add(k);
			ct++;
			if (i1%50 == 0 && n < 100000) {
				s[n] = k;
				n++;
			}
		}
		tm2 = System.currentTimeMillis();
		System.out.printf("   保存: %d ms\n", tm2-tm1);
		for (i1 = 0; i1 < n; i1++)
			data.indexOf(s[i1]);
		tm3 = System.currentTimeMillis();
		System.out.printf("   探索: %d ms\n", tm3-tm2);
		System.out.printf("   データ数: %d\n", ct);
	}
}
					// main プログラム
public class Test
{
	public static void main (String[] args)
	{
		Search ss = new Search();
							// 配列と線形探索
		System.out.printf("配列と線形探索\n");
		ss.linear();
							// ArrayListと線形探索
		System.out.printf("ArrayListと線形探索\n");
		ss.linear_v();
	}
}
		

  このプログラムを実行すると以下のような出力が得られます.
配列と線形探索
   保存: 84 ms
   探索: 251813 ms
   データ数: 5000000
ArrayListと線形探索
   保存: 864 ms
   探索: 1711338 ms
   データ数: 5000000