/** * */ package de.fhswf.in.inf.java1.aufgabe6; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Random; import java.util.Vector; /** * Class that benchmarks List implementations. * * @author $Author: $ * @version $Revision: $, $Date: $ UTC */ public final class ListBenchmark { private static final Integer TESTOBJ = new Integer(214); /** * Prevents instantiation of the utility class. * */ private ListBenchmark() { } /** * Starts a benchmark of different Lists and different test cases. * */ public static void startBenchmark() { final int times = 100000; benchmarkGrouping("ArrayList", new ArrayList(times), times); benchmarkGrouping("Vector", new Vector(times), times); benchmarkGrouping("LinkedList", new LinkedList(), times); } /** * Groups the 3 different benchmark versions together. * * @param variant * Name of the list type. * @param list * The list which will be benchmarked. * @param times * How often will be inserted. */ private static void benchmarkGrouping(String variant, List list, int times) { System.out.print(variant + " am Anfang: "); System.out.println(benchmarkAtBeginning(list, times) + " ms"); System.out.print(variant + " am Ende: "); System.out.println(benchmarkAtEnding(list, times) + " ms"); System.out.print(variant + " zufälliger Index: "); System.out.println(benchmarkAtRandom(list, times) + " ms"); } /** * Inserts new value at the beginning of the list. * * @param list * List to be tested. * @param times * How many inserts are done. * @return Time in milliseconds that the action took. */ private static long benchmarkAtBeginning(List list, int times) { long start = System.currentTimeMillis(); // Gets current time in µs for (int i = 0; i < times; i++) { list.add(0, TESTOBJ); } return (System.currentTimeMillis() - start); // Returns runtime } /** * Inserts new value at the end of the list. * * @param list * List to be tested. * @param times * How many inserts are done. * @return Time in milliseconds that the action took. */ private static long benchmarkAtEnding(List list, int times) { long start = System.currentTimeMillis(); // Gets current time in µs for (int i = 0; i < times; i++) { list.add(TESTOBJ); } return (System.currentTimeMillis() - start); // Returns runtime } /** * Inserts new value at a random index of the list. * * @param list * List to be tested. * @param times * How many inserts are done. * @return Time in milliseconds that the action took. */ private static long benchmarkAtRandom(List list, int times) { int[] randVal = new int[times]; Random rand = new Random(); for (int i = 0; i < randVal.length; i++) { randVal[i] = rand.nextInt(list.size() + i + 1); } long start = System.currentTimeMillis(); // Gets current time in µs for (int i = 0; i < times; i++) { list.add(randVal[i], TESTOBJ); } return (System.currentTimeMillis() - start); // Returns runtime } }