Der Unterschied zwischen ArrayList und LinkedList in Java

Mohammad Irfan 12 Oktober 2023
  1. ArrayList-Beispiel in Java
  2. LinkedList-Beispiel in Java
Der Unterschied zwischen ArrayList und LinkedList in Java

In diesem Tutorial wird erläutert, wie Sie char und den Anfangswert des char-Typs in Java initialisieren.

In Java sind ArrayList und LinkedList beide Klassen, die die List-Schnittstelle implementieren. Die ArrayList ist die skalierbare Array-Implementierung der List-Schnittstelle, während LinkedList die doppelt verknüpfte Listenimplementierung der List-Schnittstelle in Java ist.

ArrayList und LinkedList werden beide zum Speichern von Daten verwendet, unterscheiden sich jedoch aufgrund des Implementierungstyps. In diesem Artikel werden wir einige wichtige Unterschiede zwischen diesen anhand von Beispielen aufzeigen.

Operation ArrayList LinkedList
Hinzufügen von Elementen Braucht mehr Zeit Braucht weniger Zeit
Zugriff auf Element Braucht weniger Zeit Benötigt mehr Zeit
Element entfernen Benötigt mehr Zeit Braucht weniger Zeit
Elemente iterieren Braucht weniger Zeit Braucht mehr Zeit
Element suchen Braucht weniger Zeit Benötigt mehr Zeit
  • Leistungsprobleme mit LinkedList

Es verwendet viele kleine Speicherobjekte, die für die Cache-Lokalität schlecht sind und Leistungsprobleme im gesamten Prozess verursachen.

Obwohl LinkedList beim Hinzufügen und Löschen von Elementen schnell ist, ist es sehr langsam, wenn wir auf ein bestimmtes Element zugreifen. Im Gegensatz dazu ist ArrayList schnell für den Zugriff auf ein bestimmtes Element, aber langsam, wenn wir Elemente hinzufügen, und sehr langsam, wenn wir Elemente aus der Mitte löschen.

ArrayList-Beispiel in Java

In diesem Beispiel haben wir eine ArrayList erstellt und mehrere Operationen wie das Hinzufügen, Entfernen und Zugreifen auf Elemente angewendet. Wir messen die Zeit während der Ausführung von Operationen, damit wir den Leistungsunterschied zwischen ArrayList und LinkedList verstehen können. Siehe das Beispiel unten.

import java.util.ArrayList;
import java.util.List;

public class SimpleTesting {
  public static void main(String[] args) {
    List<Integer> list = new ArrayList<Integer>();
    System.out.println("Adding Time : " + addElement(list, 10));
    System.out.println("Adding Time : " + addElement(list, 2));
    System.out.println(list);
    System.out.println("Accessing Time : " + accessElement(list, 1));
    System.out.println("Removing Time : " + removeElement(list, 1));
    System.out.println(list);
  }
  static long addElement(List<Integer> list, int element) {
    long starttime = System.nanoTime();
    list.add(element);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
  static long accessElement(List<Integer> list, int index) {
    long starttime = System.nanoTime();
    int el = list.get(index);
    System.out.println("Element found : " + el);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
  static long removeElement(List<Integer> list, int index) {
    long starttime = System.nanoTime();
    list.remove(index);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
}

Ausgabe:

Adding Time : 48556
Adding Time : 2090
[10, 2]
Element found : 2
Accessing Time : 42301
Removing Time : 6471
[10]

LinkedList-Beispiel in Java

In diesem Beispiel haben wir eine LinkedList erstellt und mehrere Operationen wie das Hinzufügen, Entfernen und Zugreifen auf Elemente angewendet. Wir messen auch die Zeit während der Ausführung von Operationen, damit wir den Leistungsunterschied zwischen ArrayList und LinkedList verstehen können. Siehe das Beispiel unten.

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class SimpleTesting {
  public static void main(String[] args) {
    List<Integer> list = new LinkedList<Integer>();
    System.out.println("Adding Time : " + addElement(list, 10));
    System.out.println("Adding Time : " + addElement(list, 2));
    System.out.println(list);
    System.out.println("Accessing Time : " + accessElement(list, 1));
    System.out.println("Removing Time : " + removeElement(list, 1));
    System.out.println(list);
  }
  static long addElement(List<Integer> list, int element) {
    long starttime = System.nanoTime();
    list.add(element);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
  static long accessElement(List<Integer> list, int index) {
    long starttime = System.nanoTime();
    int el = list.get(index);
    System.out.println("Element found : " + el);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
  static long removeElement(List<Integer> list, int index) {
    long starttime = System.nanoTime();
    list.remove(index);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
}

Ausgabe:

Adding Time : 82591
Adding Time : 4218
[10, 2]
Element found : 2
Accessing Time : 54516
Removing Time : 7572
[10]

Verwandter Artikel - Java ArrayList

Verwandter Artikel - Java LinkedList