No J2SE6, foi introduzida a classe Arraydeque, que herda a interface DEQUE (fila bidirecional). Usando esta classe, você pode implementar as funções da classe java.util.stack por si mesmo e remove a função de sincronização multi-thread do java.util.stack.
Por exemplo, crie uma pilha que armazena o tipo inteiro, basta criar uma variável da classe Arraydeque como uma propriedade na classe e depois defini -la como uma pilha e entrar na pilha e observar os elementos na parte superior da pilha e operar diretamente a variável instância do Arraydeque.
importar java.util.arraydequ; importar java.util.dequ; classe pública Intederstack {private Deque <Teger> data = new ArrayDequ <Teger> (); public void push (elemento inteiro) {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) {Intederstack Stack = new IntegerStack (); for (int i = 0; i <5; i ++) {staCK.push (i); } System.out.println (pilha); System.out.println ("Depois de empurrar 5 elementos:" + pilha); int m = stack.pop (); System.out.println ("elemento popped =" + m); System.out.println ("Após o estoque de 1 elemento:" + pilha); int n = stack.peek (); System.out.println ("elemento espiado =" + n); System.out.println ("Após a esperança de 1 elemento:" + pilha); }} Código -fonte de java.util.arraydeque:
elementos transitórios privados e []; Cabeça privada transitória int; Tail de transiente privado; /*O local onde E é armazenado aqui é armazenado na última posição dos elementos Array*/ public void addfirst (e e) {if (e == null) lança novo nullPointerException (); Elementos [Head = (Head - 1) & (Elements.Length - 1)] = e; // O padrão para a primeira capacidade da matriz é 16, cabeça = (0-1) & (16-1) = 15 se (cabeça == cauda) dubleCapacity (); } /*Toda vez que a capacidade é expandida, ela é colocada de volta em uma nova matriz na ordem de inserção e a mais recente inserida é colocada na primeira posição da matriz. */ private void DoubleCapacity () {ASSERT HEAD == TAIL; int p = cabeça; int n = elements.length; int r = n - p; // número de elementos à direita de P int newCapacity = n << 1; se (newcapacity <0) lançar nova ilegalstateException ("Desculpe, deque demais"); Objeto [] a = novo objeto [newCapacity]; System.arraycopy (elementos, p, a, 0, r); System.arraycopy (Elements, 0, A, R, P); elementos = (e []) a; cabeça = 0; cauda = n; } public e RemowFirst () {e x = Pollfirst (); if (x == null) lançar novos nosuchElementException (); retornar x; } public e Pollfirst () {int h = Head; E resultado = elementos [h]; // elemento é nulo se deque vazio se (resultado == null) retorna nulo; elementos [h] = nulo; // Redefina esta posição na matriz para NULL para uma conveniente coleta de lixo. cabeça = (h + 1) & (elementos.Length - 1); // inverta o valor da cabeça, o que é equivalente a mover o ponteiro da pilha para baixo em uma grade. Por exemplo, 12-〉 13 Resultado de retorno; } public e peekfirst () {retornar elementos [cabeça]; // elementos [cabeça] é nulo se deque vazio}O exposto acima é tudo sobre este artigo, espero que seja útil para todos aprenderem a programação Java.