summaryrefslogtreecommitdiffstats
path: root/src/de/fhswf/in/inf/java1/aufgabe06/ListBenchmark.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/fhswf/in/inf/java1/aufgabe06/ListBenchmark.java')
-rw-r--r--src/de/fhswf/in/inf/java1/aufgabe06/ListBenchmark.java137
1 files changed, 137 insertions, 0 deletions
diff --git a/src/de/fhswf/in/inf/java1/aufgabe06/ListBenchmark.java b/src/de/fhswf/in/inf/java1/aufgabe06/ListBenchmark.java
new file mode 100644
index 0000000..b03b68d
--- /dev/null
+++ b/src/de/fhswf/in/inf/java1/aufgabe06/ListBenchmark.java
@@ -0,0 +1,137 @@
+/**
+ *
+ */
+package de.fhswf.in.inf.java1.aufgabe06;
+
+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<Integer>(times), times);
+ benchmarkGrouping("Vector", new Vector<Integer>(times), times);
+ benchmarkGrouping("LinkedList", new LinkedList<Integer>(), 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<Integer> 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<Integer> 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<Integer> 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<Integer> 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
+ }
+}