Méthode listIterator() de LinkedList en Java
listIterator()La méthode est une méthode importante en JavaLinkedListfournie par la classe, elle renvoie unListIteratorobjet, utilisé pour parcourir les éléments de la liste chaînée. Comparé à l'ordinaireIteratorcomparé à,ListIteratoril fournit des fonctions d'opération plus riches.
Syntaxe de la méthode
public ListIterator<E> listIterator(int index)
- Version sans argument : renvoie un itérateur de liste commençant au début de la liste chaînée
- Version paramétrée : renvoie un itérateur de liste commençant à la position d'index spécifiée
Paramètres de méthode
paramètre index
- Type :
int - Signification : l'index de position où l'itérateur commence
- Plage de valeurs :
0 <= index <= size() - Si l'indice passé est égal à la taille de la liste chaînée (
size()), l'itérateur pointera vers la fin de la liste chaînée
Valeur de retour
Renvoie unListIteratorobjet, qui offre la possibilité de parcourir la liste chaînée de manière bidirectionnelle.
Méthodes principales de ListIterator
Méthodes de parcours
boolean hasNext(): Vérifie s'il existe un élément suivantE next(): Renvoie l'élément suivant et déplace le curseur vers l'avantboolean hasPrevious(): Vérifie s'il existe un élément précédentE previous(): Renvoie l'élément précédent et déplace le curseur vers l'arrière
Méthodes de modification
void add(E e): Insère un élément à la position actuellevoid remove(): Supprime le dernier élément renvoyé en appelantnext()ouprevious()l'élément renvoyé parvoid set(E e): Remplace le dernier élément renvoyé en appelantnext()ouprevious()l'élément renvoyé par
Exemples d'utilisation
Exemple de parcours de base
Exemple
import java.util.ListIterator;
public class Main {
public static void main(String[] args) {
LinkedList<String> fruits = new LinkedList<>();
fruits.add("Pomme");
fruits.add("Banane");
fruits.add("Cherry");
// Obtenir ListIterator
ListIterator<String> iterator = fruits.listIterator();
// Parcours en avant
System.out.println("Parcours en avant :");
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
// Parcours inverse
System.out.println("\n"Parcours inverse :");
while(iterator.hasPrevious()) {
System.out.println(iterator.previous());
}
}
}
Parcours à partir d'une position spécifiée
Exemple
System.out.println("Parcours à partir de l'index 1 :");
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
Modification du contenu de la liste chaînée
Exemple
iterator.next(); // Passer au premier élément
iterator.set("Abricot"); // Modifier le premier élément
iterator.add("Myrtille"); // Ajouter un nouvel élément à la position actuelle
System.out.println("Liste chaînée modifiée :");
for(String fruit : fruits) {
System.out.println(fruit);
}
Notes
Modification concurrente: Si la liste chaînée est modifiée par d'autres moyens pendant l'itération (plutôt que par les méthodes propres de l'itérateur), une
ConcurrentModificationExceptionexception sera levée.Position initiale: Un objet nouvellement créé
ListIteratora son curseur initialement positionné avant le premier élément (pour la version sans argument) ou avant la position d'index spécifiée (pour la version paramétrée).Vérification des limites: Appel
next()ouprevious()lorsqu'il n'y a pas d'élément correspondant, uneNoSuchElementException。Restrictions des opérations de modification: Avant d'appeler
add()、remove()ouset()vous devez d'abord appelernext()ouprevious(), sinon uneIllegalStateException。
Différences avec Iterator
| Fonctionnalité | Iterator | ListIterator |
|---|---|---|
| Sens de parcours | Unidirectionnel (en avant uniquement) | Bidirectionnel (avant et arrière) |
| Méthodes de modification | Seulement remove() | add(), remove(), set() |
| Obtenir l'index | Non pris en charge | Prend en charge nextIndex() et previousIndex() |
| Méthode de création | iterator() | listIterator() |
Considérations de performance
LinkedListdelistIterator()La méthode a une complexité temporelle de O(1), car elle crée simplement un nouvel objet itérateur.- Les différentes opérations de l'itérateur lui-même (telles que
next()、previous()) ont une complexité temporelle de O(1), carLinkedListil est implémenté sur la base d'une liste doublement chaînée. - Pour les scénarios qui nécessitent des insertions ou suppressions fréquentes au milieu de la liste, l'utilisation de
ListIteratorest plus efficace que de passer directement par des indices.
Résumé
LinkedListdelistIterator()La méthode fournit des fonctionnalités plus puissantes qu'un itérateur classique, particulièrement adaptée aux scénarios où vous devez modifier le contenu de la liste chaînée pendant le parcours ou effectuer un parcours bidirectionnel. Comprendre et utiliser habilement cette méthode vous permet d'opérer plus efficacement surLinkedList。
Java LinkedList