CodeGym /Blog Java /Random-FR /Java Stack 101 : plonger dans la classe Stack
Auteur
Aditi Nawghare
Software Engineer at Siemens

Java Stack 101 : plonger dans la classe Stack

Publié dans le groupe Random-FR
La pile en Java est une structure de données, un peu comme une file d'attente, un tableau, une liste chaînée ou un arbre. Là où il diffère des autres, c'est que le Java Stack est basé sur le principe Last In, First Out (LIFO). Cela signifie que lorsque vous utilisez les deux commandes pour ajouter et supprimer un élément de la pile, le premier que vous supprimez sera toujours le dernier que vous avez ajouté. Examinons de plus près la classe Java Stack

Explorer la classe Java Stack

La classe Java Stack est une extension de la classe Vector , qui elle-même étend la classe List . Parce que les vecteurs sont modifiables et peuvent croître et rétrécir avec les exigences des éléments à l'intérieur, Stack s peut également changer de taille à la demande. L'extension de la classe Vector ajoute cinq opérations qui transforment un Vector en Stack . Ces cinq opérations sont :
  • .push(E item) – place un élément en haut de la pile
  • .pop() - supprime l'élément en haut de la pile et le renvoie comme valeur de la fonction
  • .peek() - regarde l'élément en haut de la pile sans le supprimer
  • .empty() – Fonction booléenne pour tester si la pile est vide ou non. Renvoie un 0 ou un 1.
  • .search(Object o) – Recherche o et renvoie sa position. La valeur est basée sur 1 et non sur 0
Stack hérite également de toutes les méthodes qui font partie de Vector , y compris, mais sans s'y limiter, toString() , contains() , indexOf() et lastElement() . Java Stack 101 : plonger dans la classe Stack - 1

Coder un exemple de pile Java

Maintenant que nous connaissons les fonctions de Stack , codez un exemple de pile Java. Les piles sont très utiles pour gérer les données qui doivent être stockées temporairement et récupérées rapidement. Étant donné que la pile est LIFO, elle est exceptionnellement utile pour la traversée de nœuds lors de l'exploration d'une structure de données arborescente. Avant d'aborder tout cela, créons une pile de base. Le code pour implémenter une pile est le suivant :

import java.util.*;

class Main {
  public static void main(String[] args) {
    Stack<Integer> stackExample = new Stack<Integer>();
C'est tout ce que vous avez à faire pour créer un Stack vide . Vous pouvez également le déclarer simplement sans déclarer de type de données en utilisant :

Stack example = new Stack();
Rappelez-vous que parce que Stack s sont modifiables, lorsque nous poussons des éléments sur la pile, sa taille s'ajustera automatiquement. Voyons maintenant comment utiliser les fonctions Stack .

Implémentation de la pile Java

Voyons comment utiliser les cinq méthodes que nous avons explorées brièvement plus tôt. L'implémentation de la pile Java est facile à retenir si vous la considérez comme une pile de plaques. Vous mettez des assiettes sur la pile, mais pour obtenir une assiette, vous n'allez pas en bas, vous en prenez une par le haut. Le dernier que vous mettez est le premier que vous enlevez. En étendant notre exemple précédent avec stackExample , les fonctions sont les suivantes :

Pousser


// pushing integers onto the Stack
    stackExample.push(5);
    stackExample.push(10);
À ce stade, nous allons montrer les autres fonctions comme si nous avions poussé ces deux entiers sur l'exemple de pile Java à chaque fois.

Populaire


//popping integers off of the Stack
System.out.println(stackExample.pop());
System.out.println(stackExample.pop());
Sortir:

10
5

Est vide

Maintenant, disons que vous voulez supprimer tous les éléments d'une pile mais que vous n'êtes pas sûr du nombre d'éléments. Vous pouvez combiner la fonction Boolean.isEmpty() avec une boucle while de condition préalable pour faire apparaître tous les éléments de Stack . Regardez comment cette implémentation de la pile Java est effectuée.

while(!stackExample.isEmpty()) {      
  System.out.println(stackExample.pop());
}
Sortir

10
5

Coup d'oeil

Nous pouvons utiliser .peek() comme implémentation de pile en Java pour jeter un œil à l'élément suivant sur la pile sans le supprimer.

System.out.println(stackExample.peek());
Sortir

10
Si nous pop et imprimons le Stack , il renverra 10 et 5 car le 10 est toujours sur la pile. Nous venons de le regarder, nous ne l'avons pas supprimé avec la fonction pop. La fonction peek est un excellent outil pour Stack s en java.

Recherche

Si nous voulons trouver un élément spécifique, l'implémentation des piles en Java utilise .search(e); pour le trouver.

System.out.println(stackExample.search(5));
Sortir

2
N'oubliez pas que c'est parce que nous comptons à partir du haut de la pile et que les piles Java commencent à 1, et non à 0 comme un Array . Donc, en regardant la pile, c'est (10) --> (5), et 5 est à la place du numéro 2. Si vous essayez de trouver un élément qui n'est pas dans le Stack , vous obtiendrez un -1 en sortie.

Itérer

Lorsque vous travaillez avec une collection, il peut arriver que vous ayez besoin de rechercher plusieurs éléments. Pour économiser de la complexité et avoir à rechercher plusieurs fois dans la pile , vous pouvez utiliser l'itération. Étant donné que Stack en Java étend la classe List , il existe plusieurs options pour itérer. L'une des plus simples consiste à utiliser simplement la fonction ListIterator . ListIterator est agréable en ce sens qu'il vous permet de parcourir une pile de haut en bas ou de bas en haut en utilisant .hasPrevious() ou .hasNext() . Voici à quoi ça ressemble :

ListIterator<Integer> exampleIterator = stackExample.listIterator(stackExample.size());

  while (exampleIterator.hasPrevious()) {
    int iteration = exampleIterator.previous();
    System.out.println(iteration);
  }
Sortir

10
5
Gardez à l'esprit que lorsque vous parcourez Stack s en Java, vous n'en supprimez aucun élément. L'itération vous permet essentiellement de jeter un coup d'œil à chaque élément de la pile dans l'ordre. Lorsque vous faites cela, vous pouvez rechercher des emplacements où se trouvent certains éléments, puis les parcourir et les manipuler. Vous pouvez les compter, les supprimer ou même les modifier si besoin est.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION