2024-05-07 20:58:31 +00:00
|
|
|
package VL13.Aufgabe03;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.LinkedList;
|
|
|
|
import java.util.Random;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Vorlesung 13 / Aufgabe 3
|
|
|
|
*
|
|
|
|
* @author Sebastian Brosch
|
|
|
|
*/
|
|
|
|
public class Aufgabe03 {
|
|
|
|
public static void main(String[] args) {
|
|
|
|
final int MAX_RUNS = 10;
|
2024-05-16 08:47:47 +00:00
|
|
|
int[] sizes = new int[] { 10000, 20000, 50000, 100000, 200000, 500000, 1000000, 2000000, 5000000, 10000000,
|
|
|
|
20000000, 50000000 };
|
2024-05-07 20:58:31 +00:00
|
|
|
|
|
|
|
for (int size : sizes) {
|
|
|
|
long sumArrayList = 0;
|
|
|
|
long sumLinkedList = 0;
|
2024-05-16 08:47:47 +00:00
|
|
|
ArrayList<String> values = getValues(size);
|
2024-05-07 20:58:31 +00:00
|
|
|
|
|
|
|
for (int i = 0; i < MAX_RUNS; i++) {
|
|
|
|
sumArrayList += runTestArrayList(values);
|
|
|
|
sumLinkedList += runTestLinkedList(values);
|
|
|
|
}
|
|
|
|
|
|
|
|
System.out.printf("\nMittelwert (Zeichenketten: %,d):\n", size);
|
|
|
|
System.out.printf(" ArrayList: %d Millisekunden\n", (sumArrayList / MAX_RUNS));
|
|
|
|
System.out.printf(" LinkedList: %d Millisekunden\n", (sumLinkedList / MAX_RUNS));
|
|
|
|
}
|
|
|
|
|
|
|
|
System.out.println("\nAlle Tests wurden beendet.");
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Method to run a test using a ArrayList.
|
|
|
|
*
|
|
|
|
* @param values The values to fill in ArrayList.
|
|
|
|
* @return The elapsed time of the test.
|
|
|
|
*/
|
|
|
|
private static long runTestArrayList(ArrayList<String> values) {
|
|
|
|
long timeStart = System.currentTimeMillis();
|
|
|
|
ArrayList<String> testArrayList = new ArrayList<String>();
|
|
|
|
|
|
|
|
for (String value : values) {
|
|
|
|
testArrayList.add(value);
|
|
|
|
}
|
|
|
|
|
|
|
|
return System.currentTimeMillis() - timeStart;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Method to run a test using LinkedList.
|
|
|
|
*
|
|
|
|
* @param values The values to fill in LinkedList.
|
|
|
|
* @return The elapsed time of the test.
|
|
|
|
*/
|
|
|
|
private static long runTestLinkedList(ArrayList<String> values) {
|
|
|
|
long timeStart = System.currentTimeMillis();
|
|
|
|
LinkedList<String> testLinkedList = new LinkedList<String>();
|
|
|
|
|
|
|
|
for (String value : values) {
|
|
|
|
testLinkedList.add(value);
|
|
|
|
}
|
|
|
|
|
|
|
|
return System.currentTimeMillis() - timeStart;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Method to determine a random number from a certain range.
|
|
|
|
*
|
|
|
|
* @param start The first number of the range.
|
|
|
|
* @param end The last number of the range.
|
|
|
|
* @return A random number from a certain range.
|
|
|
|
*/
|
|
|
|
private static int getRandomNumber(int start, int end) {
|
|
|
|
return (new Random()).nextInt((end - start + 1)) + start;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Method to generate a random string.
|
|
|
|
*
|
|
|
|
* @param min The minimum length of the random string.
|
|
|
|
* @param max The maximum length of the random string.
|
|
|
|
* @return A random string.
|
|
|
|
*/
|
|
|
|
private static String getRandomString(int min, int max) {
|
|
|
|
final String NUMBERS = "0123456789";
|
|
|
|
final String UCHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
|
|
final String LCHARS = UCHARS.toLowerCase();
|
|
|
|
|
|
|
|
String random = "";
|
|
|
|
int length = getRandomNumber(min, max);
|
|
|
|
|
|
|
|
for (int i = 0; i < length; i++) {
|
|
|
|
String chars = "";
|
|
|
|
|
|
|
|
switch (getRandomNumber(1, 3)) {
|
|
|
|
case 1:
|
|
|
|
chars = NUMBERS;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
chars = UCHARS;
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
chars = LCHARS;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
int charIndex = getRandomNumber(0, chars.length() - 1);
|
|
|
|
random += chars.substring(charIndex, charIndex + 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
return random;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Method to get a list with random strings.
|
|
|
|
*
|
|
|
|
* @param numberOfStrings The amount of random strings to generate.
|
|
|
|
* @return A list with random strings.
|
|
|
|
*/
|
|
|
|
private static ArrayList<String> getValues(int numberOfStrings) {
|
|
|
|
final int MIN_LENGTH = 10;
|
|
|
|
final int MAX_LENGTH = 16;
|
|
|
|
ArrayList<String> values = new ArrayList<String>();
|
|
|
|
|
|
|
|
for (int i = 0; i < numberOfStrings; i++) {
|
|
|
|
values.add(getRandomString(MIN_LENGTH, MAX_LENGTH));
|
|
|
|
}
|
|
|
|
|
|
|
|
return values;
|
|
|
|
}
|
|
|
|
}
|