résumé
Après avoir appris Vector, nous commencerons à apprendre Stack. La pile est simple, elle hérite du vecteur. La méthode d'apprentissage est toujours la même qu'auparavant. Tout d'abord, ayez une compréhension holistique de la pile, puis apprenez son code source; Enfin, apprenez à l'utiliser à travers des exemples.
La pile est la pile. Ses caractéristiques sont les suivantes: premier dans et dernier (filo, premier dans le dernier retrait).
La pile dans la boîte à outils Java est héritée du vecteur (file d'attente de vecteur). Étant donné que le vecteur est implémenté via des tableaux, cela signifie que la pile est également implémentée via des tableaux, et non des listes liées. Bien sûr, nous pouvons également utiliser LinkedList comme pile! Dans "Introduction détaillée au vecteur (analyse du code source) et des exemples d'utilisation de la série de collecte Java 06", la structure de données du vecteur a été introduite en détail, et la structure des données de la pile ne sera pas expliquée ici.
java.lang.object
↳ java.util.abstractcollection <e>
↳ Java.util.abstractList <e>
↳ java.util.vector <e>
↳ java.util.stack <e>
Stack de classe publique <E> étend Vector <e> {}
La relation entre la pile et la collection est la suivante:
Stack n'a qu'un seul constructeur par défaut, comme suit:
Empiler()
API de Stack
La pile est la pile, et son API couramment utilisée est la suivante:
booléen vide ()
synchronisé e peek ()
synchronisé e pop ()
E push (e objet)
Synchronisé INT Search (objet O)
Depuis la pile et l'héritage du vecteur, il contient également toutes les API dans le vecteur.
Le code source de Stack est très simple, apprenons-le ci-dessous.
Package Java.util; PublicClass Stack <E> étend Vector <E> {// ID de version. Ceci est utilisé pour le contrôle de mise à niveau de version, vous n'avez donc pas besoin de y prêter attention! Final statique privé long SerialVersionUID = 1224463164541339165L; // Constructor public Stack () {} // Fonction push: Enregistrez les éléments en haut de la pile public e push (e item) {// Enregistrer les éléments en haut de la pile. // l'implémentation d'AddElement () est dans Vector.java AddElement (item); return item; } // Fonction POP: renvoie l'élément supérieur de la pile et la supprimer de la pile publique synchronisée e pop () {e obj; int len = size (); obj = peek (); // Supprimer l'élément supérieur de la pile, devayElementat () est dans Vector.Java devayElementat (Len - 1); retour obj; } // Fonction PEEK: Renvoie l'élément supérieur de la pile, sans l'opération de suppression publique synchronisée e peek () {int len = size (); if (len == 0) lancez un nouveau videstacKException (); // Renvoie l'élément supérieur de la pile, elementat () est implémenté dans Vector.java. return elementat (len - 1); } // si la pile est vide publique booléen vide () {return size () == 0; } // Trouvez la position de "l'élément O" dans la pile: du bas de la pile vers le haut de la pile, le public synchronisé int search (objet o) {// Obtenez l'index d'élément, elementat () est implémenté dans Vector.java. int i = LastIndexof (o); if (i> = 0) {return size () - i; } return -1; }} (01) La pile est réellement implémentée via des tableaux.
Lorsque la poussée est effectuée (c'est-à-dire en poussant l'élément dans la pile), c'est en ajoutant l'élément à la fin du tableau.
Lors de l'exécution de PEEK (c'est-à-dire que l'élément supérieur de la pile est supprimé et aucune suppression n'est effectuée), c'est l'élément qui renvoie la fin du tableau.
Lors de l'exécution d'un POP (c'est-à-dire de retirer l'élément supérieur de la pile et de supprimer l'élément de la pile), il s'agit de retirer l'élément à la fin du tableau, puis de supprimer l'élément du tableau.
(02) La pile hérite de Vector, ce qui signifie que les propriétés et les fonctions de Vector possèdent.
Ci-dessous, nous apprenons à utiliser la pile à travers des exemples
Importer java.util.stack; Importer java.util.iterator; import java.util.list; / ** * @desc Stack's Test Program. Testez l'utilisation des API communes * * @author skywang * / classe publique StackTest {public static void main (String [] args) {stack stack = new Stack (); // Ajouter 1,2,3,4,5 à la pile pour (int i = 1; i <6; i ++) {stack.push (string.valueof (i)); } // Traverse et imprimez le pile iteratorthroughrandomaccess (pile); // Trouvez la position de "2" dans la pile et la sortie int pos = stack.search ("2"); System.out.println ("Le poste de 2 est:" + pos); // Après l'élément supérieur de la pile de pup, Traverse Stack.pop (); iteratorthroughrandomaccess (pile); // Après l'élément de surface de pile de Peek, Traverse Stack String Val = (String) Stack.Peek (); System.out.println ("Peek:" + Val); iteratorthroughrandomaccess (pile); // Traverse Stack Iteratorthroughterator (Stack) via Iterator; } / ** * Traverse Stack via un accès rapide * / public static void iteratorthroughrandomaccess (list list) {String val = null; for (int i = 0; i <list.size (); i ++) {val = (string) list.get (i); System.out.print (Val + ""); } System.out.println (); } / ** * itérater via un iterator * / public static void iteratorthroughiterator (list list) {String val = null; for (iterator iter = list.iterator (); iter.hasnext ();) {val = (string) iter.next (); System.out.print (Val + ""); } System.out.println (); }}Résultats en cours:
1 2 3 4 5
La possion de 2 est: 4
1 2 3 4
coup d'œil: 4
1 2 3 4
1 2 3 4