resumen
Después de aprender Vector, comenzaremos a aprender pila. La pila es simple, hereda del vector. El método de aprendizaje sigue siendo el mismo que antes. Primero, tenga una comprensión holística de la pila, luego aprenda su código fuente; Finalmente, aprenda a usarlo a través de ejemplos.
La pila es la pila. Sus características son: Primero en y último (Filo, primero en el último).
La pila en el kit de herramientas Java se hereda del vector (cola de vectores). Dado que Vector se implementa a través de matrices, esto significa que la pila también se implementa a través de matrices, no listas vinculadas. ¡Por supuesto, también podemos usar LinkedList como pila! En "Introducción detallada al vector (análisis del código fuente) y ejemplos de uso de Java Collection Series 06", la estructura de datos de Vector se ha introducido en detalle, y la estructura de datos de la pila no se explicará aquí.
java.lang.object
↳ java.util.AbstractCollection <E>
↳ java.util.abstractList <E>
↳ java.util.vector <E>
↳ java.util.stack <E>
Public Class Stack <E> extiende Vector <E> {}
La relación entre pila y colección es la siguiente:
Stack tiene solo un constructor predeterminado, como sigue:
Pila()
API de pila
La pila es la pila, y su API comúnmente utilizada es la siguiente:
booleano vacío ()
Sincronizado E PEEK ()
sincronizado e pop ()
E Push (E Object)
Sincronización sincronizada int (objeto o)
Desde que se acumula y heredan de Vector, también contiene todas las API en Vector.
El código fuente de Stack es muy simple, aprendamos a continuación.
Paquete java.util; PublicClass Stack <E> extiende Vector <E> {// ID de versión. Esto se usa para el control de la actualización de la versión, por lo que no necesita prestarle atención aquí. Private static final Long SerialVersionUid = 1224463164541339165l; // Constructor public stack () {} // Función de empuje: Guardar elementos en la parte superior de la pila public e push (e item) {// Guarde elementos en la parte superior de la pila. // La implementación de addelement () está en vector.java addelement (elemento); artículo de devolución; } // Función POP: devuelva el elemento superior de la pila y elimínelo de la pila pública sincronizada e pop () {e obj; int len = size (); obj = peek (); // Eliminar el elemento superior de la pila, eliminarElementat () está en vector.java removeLementat (len - 1); regresar obj; } // Función PEEK: Devuelva el elemento superior de la pila, sin operación de deleción, public Public Synchronized e Peek () {int len = size (); if (len == 0) tirar nueva vacíastackexception (); // Devuelve el elemento superior de la pila, elementat () se implementa en vector.java. return elementat (len - 1); } // si la pila es vacía pública boolean vacía () {return size () == 0; } // Encuentre la posición de "Elemento O" en la pila: desde la parte inferior de la pila a la parte superior de la pila, public sincronized int Search (Object O) {// Obtener el índice de elementos, elementat () se implementa en vector.java. int i = lastindexof (o); if (i> = 0) {return size () - i; } return -1; }} (01) La pila en realidad se implementa a través de matrices.
Cuando se realiza el empuje (es decir, empujando el elemento a la pila), es agregando el elemento al final de la matriz.
Al ejecutar PEEK (es decir, se elimina el elemento superior en la pila y no se realiza la eliminación), es el elemento el que devuelve el final de la matriz.
Al ejecutar un POP (es decir, sacar el elemento superior en la pila y eliminar el elemento de la pila), es sacar el elemento al final de la matriz y luego eliminar el elemento de la matriz.
(02) La pila hereda del vector, lo que significa que tanto las propiedades como las funciones que Vector tiene, Plaack posee.
A continuación aprendemos a usar la pila a través de ejemplos
import java.util.stack; import java.util.iterator; import java.util.list;/*** @Desc STACK's Test Program. Pruebe el uso de API comunes * * @author Skywang */public class StackTest {public static void main (string [] args) {stack stack = new stack (); // Agregue 1,2,3,4,5 a la pila para (int i = 1; i <6; i ++) {stack.push (string.valueOf (i)); } // Traverse e imprima la pila IteratorThroughRandomAccess (pila); // Encuentra la posición de "2" en la pila y salida int pos = stack.search ("2"); System.out.println ("La publicación de 2 es:"+pos); // Después del elemento superior de la pila de cachorro, Traverse stack.pop (); iteratorthroughrandomaccess (pila); // Después del elemento superior de la pila de vista, Traverse Stack String Val = (String) Stack.peek (); System.out.println ("Peek:"+Val); iteratorthroughrandomaccess (pila); // Traverse Stack IteratorThroughIterator (pila) a través del iterador; } / ** * pila de transversal a través de acceso rápido * / 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 (); } / ** * iterer a través de un iterador * / 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 (); }}Resultados de ejecución:
1 2 3 4 5
La publicación de 2 es: 4
1 2 3 4
Peok: 4
1 2 3 4
1 2 3 4