Java LinkedList add()-Methode

Java LinkedList Java LinkedList


Die LinkedList-Klasse bietet mehrere überladene Versionen der add()-Methode zum Hinzufügen von Elementen zur Liste.

1. boolean add(E e)

Dies ist die grundlegendste add-Methode; sie hängt das angegebene Element an das Ende der Liste an.

Beispiel

LinkedList<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");

Methodeneigenschaften:

  • Gibt immer true zurück (weil LinkedList doppelte Elemente zulässt)
  • Die Zeitkomplexität ist O(1)
  • Entspricht der addLast()-Methode

2. void add(int index, E element)

Fügt das angegebene Element an der angegebenen Position in die Liste ein.

Beispiel

LinkedList<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
list.add(1, "Orange"); // An Index 1 einfügen

Methodeneigenschaften:

  • Wenn der Index der Listengröße entspricht, ist es äquivalent zu add(E e)
  • Erfordert ein Durchlaufen bis zur angegebenen Position, mit einer durchschnittlichen Zeitkomplexität von O(n)
  • Kann IndexOutOfBoundsException auslösen

3、boolean addAll(Collection<? extends E> c)

Hängt alle Elemente der angegebenen Collection in der Reihenfolge, die von ihrem Iterator zurückgegeben wird, an das Ende der Liste an.

Beispiel

LinkedList<String> fruits = new LinkedList<>();
fruits.add("Apfel");
fruits.add("Banane");

List<String> moreFruits = Arrays.asList("Orange", "Grape");
fruits.addAll(moreFruits);

Methodeneigenschaften:

  • Gibt true zurück, wenn die Liste durch den Aufruf geändert wurde
  • Die Zeitkomplexität ist O(m), wobei m die Größe der Parametersammlung ist

4、boolean addAll(int index, Collection<? extends E> c)

Fügt alle Elemente in der angegebenen Sammlung in diese Liste ein, beginnend an der angegebenen Position.

Beispiel

LinkedList<String> fruits = new LinkedList<>();
fruits.add("Apfel");
fruits.add("Banane");

List<String> moreFruits = Arrays.asList("Orange", "Grape");
fruits.addAll(1, moreFruits); // Die Sammlung an Index 1 einfügen

Methodeneigenschaften:

  • Erfordert zunächst das Durchlaufen bis zur angegebenen Position
  • Die Zeitkomplexität ist O(n + m), wobei n die Listengröße und m die Sammlungsgröße ist

Vergleich mit anderen Methoden

add() vs. addLast()

  • add(E e)undaddLast(E e)Vollständig äquivalent
  • Beide werden verwendet, um Elemente am Ende der Liste hinzuzufügen

add() vs. offer()

  • add(E e)Kann in einer kapazitätsbeschränkten Warteschlange eine Ausnahme auslösen
  • offer(E e)Gibt false zurück, anstatt in einer kapazitätsbeschränkten Warteschlange eine Ausnahme auszulösen

add() vs. push()

  • push(E e)Ruft tatsächlich aufaddFirst(E e)
  • Fügt das Element am Anfang der Liste statt am Ende hinzu

Leistungsüberlegungen

Effizienz von Add-Operationen

  • Hinzufügen am Ende: O(1)-Zeitkomplexität
  • Hinzufügen am Anfang: O(1)-Zeitkomplexität (unter Verwendung von addFirst())
  • Hinzufügen in der Mitte: O(n)-Zeitkomplexität (erfordert Traversierung zur angegebenen Position)

Vergleich mit ArrayList

Aktion LinkedList ArrayList
Hinzufügen am Ende O(1) O(1) amortisiert
Hinzufügen am Anfang O(1) O(n)
Hinzufügen in der Mitte O(n) O(n)
Wahlfreier Zugriff O(n) O(1)

Praktische Anwendungsbeispiele

Erstellen einer To-Do-Liste

Beispiel

LinkedList<String> todoList = new LinkedList<>();

// Aufgabe hinzufügen
todoList.add("Lebensmittel kaufen");
todoList.addFirst("E-Mails prüfen"); // Aufgabe mit hoher Priorität
todoList.add(1, "Mama anrufen"); // Mittlere Priorität

System.out.println(todoList);
// Ausgabe: [E-Mails prüfen, Mama anrufen, Lebensmittel kaufen]

Implementieren einer einfachen Warteschlange

Beispiel

LinkedList<String> queue = new LinkedList<>();

// Einfügeoperation
queue.add("Erster");
queue.add("Second");
queue.add("Third");

// Dequeue-Operation
while(!queue.isEmpty()) {
    System.out.println(queue.removeFirst());
}

Zwei Listen zusammenführen

Beispiel

LinkedList<String> list1 = new LinkedList<>(Arrays.asList("A", "B", "C"));
LinkedList<String> list2 = new LinkedList<>(Arrays.asList("D", "E", "F"));

list1.addAll(list2);
System.out.println(list1); // Ausgabe: [A, B, C, D, E, F]

Hinweise

  1. Thread-Sicherheit: LinkedList ist nicht threadsicher und erfordert in einer Multithread-Umgebung externe Synchronisation.
  2. Null-Elemente: Das Hinzufügen von null-Elementen ist erlaubt.
  3. Indexprüfung: Achten Sie bei der Verwendung der add-Methode mit einem Index auf Randbedingungen
  4. Nebenläufige Änderung: Das Ändern der Liste während der Verwendung eines Iterators löst eine ConcurrentModificationException aus

Java LinkedList Java LinkedList

Andere Erweiterungen