Explication détaillée de la méthode addFirst() de Java LinkedList
addFirst()OuiLinkedListUne méthode importante de la classe, utilisée pour insérer l'élément spécifié au début de la liste chaînée.
Syntaxe de la méthode
public void addFirst(E e)
Description du paramètre
E e: L'élément à ajouter au début de la liste chaînée
Valeur de retour
Cette méthode ne renvoie aucune valeur (void).
Fonctionnement de la méthode addFirst()
addFirst()Le principe de fonctionnement de la méthode peut être brièvement décrit comme suit :
- Créer un nouvel objet nœud (Node)
- Faire pointer le
nextpointeur du nouveau nœud vers le nœud de tête actuel - Faire pointer le
prevpointeur du nœud de tête actuel vers le nouveau nœud - Mettre à jour le
headpointeur du nœud de tête actuel vers le nouveau nœud - Si la liste chaînée était précédemment vide, faire également pointer le nœud de queue vers le nouveau nœud
- Incrémenter le compteur de taille de la liste chaînée (size++)
Complexité temporelle
La complexité temporelle de la méthode addFirst() est O(1), car quelle que soit la taille de la liste chaînée, elle ne nécessite qu'un nombre fixe d'opérations.
Exemples d'utilisation
Regardons l'utilisation spécifique de la méthode à travers quelques exemples.addFirst()Exemple 1 : Utilisation de base
Exemple 1 : Utilisation de base
Exemple
public class AddFirstExample {
public static void main(String[] args) {
// Ajouter les éléments initiaux
LinkedList<String> fruits = new LinkedList<>();
"Liste chaînée originale : "
fruits.add("Banane");
fruits.add("Orange");
System.out.println(// Sortie : [Banana, Orange] + fruits); // Utilisez addFirst() pour ajouter un élément au début
"Liste chaînée après ajout : "
fruits.addFirst("Apple");
System.out.println(// Sortie : [Apple, Banana, Orange] + fruits); Exemple 2 : Ajouts consécutifs
}
}
Exemple 2 : Ajouts consécutifs
Exemple
public class ContinuousAddFirst {
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
// Sortie : [1, 2, 3]
numbers.addFirst(3);
numbers.addFirst(2);
numbers.addFirst(1);
System.out.println(numbers); // Remarquez la relation entre l'ordre d'ajout et le résultat final
Exemple 3 : Différence par rapport à la méthode add()
}
}
Exemple 3 : Différence par rapport à la méthode add()
Exemple
public class AddVsAddFirst {
public static void main(String[] args) {
LinkedList<String> list1 = new LinkedList<>();
LinkedList<String> list2 = new LinkedList<>();
// Utiliser la méthode addFirst() pour ajouter les mêmes éléments
list1.add("A");
list1.add("B");
list1.add("C");
"Utilisation de add() : "
list2.addFirst("C");
list2.addFirst("B");
list2.addFirst("A");
System.out.println(// Sortie : [A, B, C] + list1); "Utilisation de addFirst() : "
System.out.println(// Sortie : [A, B, C] + list2); // Bien que le résultat final soit le même, l'ordre d'ajout est inversé
Notes
}
}
Notes
1. Différence par rapport à la méthode add()addFirst()La méthode ajoute des éléments à la fin de la liste chaînée par défaut
1. Différence par rapport à la méthode add()
add()2. Différence avec la méthode offerFirst()addFirst()Peut lever une exception dans une file à capacité limitée
2. Différence avec la méthode offerFirst()
addFirst()au lieu de lever une exceptionofferFirst()3. Gestion des valeurs nullfalsePermet d'ajouter
3. Gestion des valeurs null
LinkedListest autorisé.null4. Sécurité des threadsaddFirst(null)n'est pas sûr pour les threads ; s'il est utilisé dans un environnement multithread
4. Sécurité des threads
LinkedListScénarios d'application pratiquesaddFirst()La méthode est particulièrement utile dans les scénarios suivants :
Scénarios d'application pratiques
addFirst()Comme une pile est une structure « dernier entré, premier sorti » (LIFO), addFirst() et removeFirst() peuvent être utilisés pour simuler des opérations de pile.
1. Implémentation d'une structure de pile
// Empiler dans la pile
Exemple
stack.addFirst("Task1"); // Dépiler de la pile, renvoie "Task2"
stack.addFirst("Task2"); 2. Liste des plus récemment utilisés
String top = stack.removeFirst(); Lors de l'implémentation d'une liste des plus récemment utilisés (MRU), les éléments nouvellement consultés peuvent être ajoutés au début de la liste.
2. Liste des plus récemment utilisés
En ajoutant des éléments un par un à une nouvelle liste avec addFirst(), l'inversion de liste peut être réalisée.
3. Opération d'inversion
// Sortie : [3, 2, 1]
Exemple
LinkedList<Integer> reversed = new LinkedList<>();
for (Integer num : original) {
reversed.addFirst(num);
}
System.out.println(reversed); La méthode a de très bonnes performances dans
Considérations de performance
addFirst()Création d'un nouveau nœudLinkedListAjuster quelques pointeurs
- Peu importe la taille de la liste chaînée, le temps nécessaire à ces opérations est constant (complexité temporelle O(1)). Cela contraste nettement avec l’
- opération, qui nécessite de déplacer tous les éléments existants (complexité temporelle O(n)).
Par conséquent, si vous devez fréquemment ajouter des éléments au début d’une collection,ArrayListdeadd(0, element)est un meilleur choix que
.LinkedListQuestions fréquentesArrayListQ1 : addFirst() écrasera-t-il les éléments existants ?
Questions fréquentes
Q1 : addFirst() écrasera-t-il les éléments existants ?
Q2 : Si la liste chaînée est vide, addFirst() fonctionne-t-il encore ?addFirst()Oui, si la liste chaînée est vide,
Q2 : Si la liste chaînée est vide, addFirst() fonctionne-t-il encore ?
Q3 : Quelle est la différence entre addFirst() et push() ?addFirst()Dans
Q3 : Quelle est la différence entre addFirst() et push() ?
DansLinkedListsont exactement la même méthode.addFirst()etpush()n’est qu’push()un autre nom pouraddFirst(), utilisé pour permettreLinkedListd'être utilisé comme une pile.
Q4 : Pourquoi mon IDE m'indique-t-il que addFirst() est une méthode de Deque ?
Parce queLinkedListimplémente l'Dequeinterface,addFirst()est en faitDequeune méthode définie dans l'LinkedListinterface, et
Résumé
LinkedListdeaddFirst()RésuméLinkedListLa méthode est une opération efficace qui nous permet d'insérer des éléments au début d'une liste chaînée. Comprendre cette méthode est très important pour utiliser efficacement
, en particulier dans les scénarios où des éléments doivent être fréquemment insérés au début d'une collection.
addFirst()Récapitulatif des points clés :- Insère des éléments au début de la liste chaînée
- et
add()La complexité temporelle est O(1) - Position d'insertion différente de la méthode add()
- Couramment utilisé pour implémenter des structures de pile et des listes des éléments les plus récemment utilisés
Nécessite une synchronisation supplémentaire dans les environnements multithreadaddFirst()En utilisant laLinkedListméthode de manière raisonnable, les avantages de performance de
Java LinkedList