En J2SE6, se introdujo la clase Arraydeque, que hereda la interfaz deque (cola bidireccional). Usando esta clase, puede implementar las funciones de la clase java.util.stack por usted mismo y elimina la función de sincronización de múltiples subprocesos de java.util.stack.
Por ejemplo, cree una pila que almacene el tipo de entero, simplemente cree una variable de la clase Arraydeque como una propiedad en la clase, y luego la defina como una pila e ingrese la pila, y observe los elementos en la parte superior de la pila, y opere directamente la variable de instancia del Arraydeque.
import java.util.arrayDequ; importar java.util.dequ; public class InteGerStack {private deque <integer> data = new ArrayDequ <Integer> (); public void push (elemento entero) {data.addfirst (elemento); } public Integer Pop () {return data.removeFirst (); } public Integer Peek () {return data.peekfirst (); } public String toString () {return data.ToString (); } public static void main (string [] args) {InteGerStack stack = new InteGerStack (); para (int i = 0; i <5; i ++) {stack.push (i); } System.out.println (pila); System.out.println ("Después de empujar 5 elementos:" + pila); int m = stack.pop (); System.out.println ("Popped Element =" + M); System.out.println ("Después de aparecer 1 elemento:" + pila); int n = stack.peek (); System.out.println ("Peeked Element =" + N); System.out.println ("Después de mirar 1 elemento:" + pila); }} Código fuente de java.util.arraydeque:
elementos privados transitorios e []; Cabeza privada transitoria int; Tail transitoria privada; /*La ubicación donde se almacena aquí se almacena desde la última posición de la matriz de elementos*/ public void addfirst (e e) {if (e == null) tirar nueva nullPointerException (); elementos [cabeza = (cabeza - 1) & (elements.length - 1)] = e; // El valor predeterminado para la primera capacidad de matriz es 16, head = (0-1) & (16-1) = 15 if (head == cola) doubleCapacity (); } /*Cada vez que se expande la capacidad, se vuelve a colocar en una nueva matriz en el orden de inserción, y el último insertado se coloca en la primera posición de la matriz. */ private void doublecapacity () {afirmar head == cola; int p = cabeza; int n = Elements.length; int r = n - p; // Número de elementos a la derecha de P int NewCapacity = n << 1; if (newCapacity <0) tirar nueva ilegalstateException ("lo siento, deque demasiado grande"); Objeto [] a = nuevo objeto [newCapacity]; System.ArrayCopy (Elementos, P, A, 0, R); System.ArrayCopy (Elementos, 0, A, R, P); elementos = (e []) a; cabeza = 0; cola = n; } public e removeFirst () {e x = pollFirst (); if (x == null) tirar nueva nosuchelementException (); regresar x; } public e pollfirst () {int h = head; E resultado = elementos [h]; // El elemento es nulo si se vacía si (resultado == nulo) return null; elementos [h] = nulo; // reinicie esta posición en la matriz a NULL para una conveniente recolección de basura. Head = (H + 1) & (Elements.length - 1); // Invierta el valor de la cabeza, que es equivalente a mover el puntero de la pila hacia abajo una cuadrícula. Por ejemplo, 12-〉 13 Resultado de retorno; } public e peekFirst () {return Elements [head]; // elementos [cabeza] es nulo si deque está vacío}Lo anterior se trata de este artículo, espero que sea útil para todos aprender la programación de Java.