Hallo zusamen :
Ich habe auf Youtube folgendes Video zum Thema LinkedList und ArrayList mir angesehen :
Ich wollte die Performance in einem kleinem Java Programm messen :
Dazu will ich in eine ArrayList und LinkedList jeweils die gleiche Anzahl von Elementen einfügen und wieder löschen. Nach meinem Verständnis sollte die Linked List deutlich schneller sein.
Hier ist mein Programm :
Kurz zur Erklärung : In meinen ersten Versuchen war die ArrayList immer schneller. Dher habe ich das Programm umgebaut. Nun werden die Aktionen 100x ausgeführt und der Mittelwert der Zeit zum Hinzufügen und Löschen gebildet :
hier die ausgabe :
Hat jemand eine erklärung dafür
Ich habe auf Youtube folgendes Video zum Thema LinkedList und ArrayList mir angesehen :
Ich wollte die Performance in einem kleinem Java Programm messen :
Dazu will ich in eine ArrayList und LinkedList jeweils die gleiche Anzahl von Elementen einfügen und wieder löschen. Nach meinem Verständnis sollte die Linked List deutlich schneller sein.
Hier ist mein Programm :
Java:
public static int numberOfElements = 10000000;
public static int numberOfActions = 100;
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("erzeuge ein ArrayList mit " + numberOfElements + " Elementen");
ArrayList<Integer> myArrayList = new ArrayList<>();
listAction(myArrayList);
System.out.println("--------------------------------");
System.out.println("erzeuge ein LinkedList mit " + numberOfElements + " Elementen");
LinkedList<Integer> myLinkedList = new LinkedList<>();
listAction(myLinkedList);
}
public static long actionAddElements(List<Integer> myList){
var startTimeStamp = System.currentTimeMillis();
for (int i = 0; i < numberOfElements; i++){
myList.add(i);
}
var endTimeStamp = System.currentTimeMillis();
var duration = endTimeStamp - startTimeStamp;
return duration;
}
public static long actionRemoveElemnts(List<Integer> myList){
var startTimeStamp = System.currentTimeMillis();
for (int i = numberOfElements - 1 ; i >= 0 ; i--){
myList.remove(i);
}
var endTimeStamp = System.currentTimeMillis();
var duration = endTimeStamp - startTimeStamp;
return duration;
}
public static void listAction(List<Integer> myList){
long durationAdd = 0;
long durationRemove = 0;
for (int i = 0; i < numberOfActions; i++){
durationAdd += actionAddElements(myList);
durationRemove += actionRemoveElemnts(myList);
}
System.out.println("dauer einfügen " + durationAdd / numberOfActions);
System.out.println("dauer löschen " + durationRemove / numberOfActions);
}
Kurz zur Erklärung : In meinen ersten Versuchen war die ArrayList immer schneller. Dher habe ich das Programm umgebaut. Nun werden die Aktionen 100x ausgeführt und der Mittelwert der Zeit zum Hinzufügen und Löschen gebildet :
hier die ausgabe :
Code:
erzeuge ein ArrayList mit 10000000 Elementen
dauer einfügen 51 ms
dauer löschen 11 ms
--------------------------------
erzeuge ein LinkedList mit 10000000 Elementen
dauer einfügen 848 ms
dauer löschen 104 ms
Hat jemand eine erklärung dafür