Java LinkedList add()-Methode
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");
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
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);
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
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ösenoffer(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]
// 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());
}
// 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]
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
- Thread-Sicherheit: LinkedList ist nicht threadsicher und erfordert in einer Multithread-Umgebung externe Synchronisation.
- Null-Elemente: Das Hinzufügen von null-Elementen ist erlaubt.
- Indexprüfung: Achten Sie bei der Verwendung der add-Methode mit einem Index auf Randbedingungen
- Nebenläufige Änderung: Das Ändern der Liste während der Verwendung eines Iterators löst eine ConcurrentModificationException aus
Java LinkedList