A Pilha em Java é uma estrutura de dados, muito parecida com uma fila, array, lista encadeada ou árvore. Onde ele difere dos outros é que o Java Stack é baseado no princípio Last In, First Out (LIFO). O que isto significa é que quando você usa os dois comandos para adicionar e remover um elemento da pilha, o primeiro que você remove será sempre o último que você adicionou. Vamos dar uma olhada mais de perto na classe Java Stack
Explorando a classe de pilha Java
A classe Java Stack é uma extensão da classe Vector , que por sua vez estende a classe List . Como os vetores são mutáveis e podem crescer e encolher de acordo com as demandas dos elementos internos, os Stack s também podem mudar de tamanho sob demanda. A extensão da classe Vector adiciona cinco operações que transformam um Vector em uma Pilha . Estas cinco operações são:- .push(E item) – coloca um elemento no topo da pilha
- .pop() – remove o elemento do topo da pilha e o retorna como o valor da função
- .peek() – olha para o elemento no topo da pilha sem removê-lo
- .empty() – Função booleana para testar se a pilha está vazia ou não. Retorna um 0 ou 1.
- .search(Object o) – Procura o e retorna sua posição. O valor é baseado em 1, não baseado em 0
Codificando um exemplo de pilha Java
Agora que conhecemos as funções do Stack , vamos codificar um exemplo de pilha java. Stack s são muito úteis para lidar com dados que devem ser armazenados temporariamente e recuperados rapidamente. Como a pilha é LIFO, ela é excepcionalmente útil para a travessia de nós ao explorar uma estrutura de dados em árvore. Antes de entrarmos em tudo isso, vamos criar uma pilha básica. O código para implementar uma pilha é o seguinte:
import java.util.*;
class Main {
public static void main(String[] args) {
Stack<Integer> stackExample = new Stack<Integer>();
Isso é tudo que você precisa fazer para criar um Stack vazio . Você também pode simplesmente declará-lo sem declarar um tipo de dados usando:
Stack example = new Stack();
Lembre-se de que, como os Stack s são mutáveis, à medida que colocamos os elementos na pilha, o tamanho será ajustado automaticamente. Agora vamos ver como usar as funções Stack .
Implementação de Pilha Java
Vejamos como usar os cinco métodos que exploramos brevemente anteriormente. A implementação da pilha Java é fácil de lembrar se você pensar nela como uma pilha de placas. Você coloca pratos na pilha, mas para pegar um prato, você não vai até o fundo, você pega um de cima. O último que você coloca é o primeiro que você tira. Estendendo nosso exemplo anterior com stackExample , as funções são as seguintes:Empurrar
// pushing integers onto the Stack
stackExample.push(5);
stackExample.push(10);
Neste ponto, vamos mostrar as outras funções como se tivéssemos colocado esses dois inteiros no exemplo de pilha Java todas as vezes.
pop
//popping integers off of the Stack
System.out.println(stackExample.pop());
System.out.println(stackExample.pop());
Saída:
10
5
Está vazia
Agora, digamos que você deseja remover todos os elementos de uma pilha , mas não tem certeza de quantos elementos existem. Você pode combinar a função Boolean.isEmpty() com um loop while de pré-condição para remover todos os elementos do Stack . Veja como essa implementação de pilha java é feita.
while(!stackExample.isEmpty()) {
System.out.println(stackExample.pop());
}
Saída
10
5
Olhadinha
Podemos usar .peek() como implementação de pilha em Java para dar uma olhada no próximo item da pilha sem removê-lo.
System.out.println(stackExample.peek());
Saída
10
Se abrirmos e imprimirmos o Stack , ele retornará 10 e 5 porque o 10 ainda está na pilha. Nós apenas olhamos para ele, não o removemos com a função pop. A função peek é uma ótima ferramenta para Stack s em java.
Procurar
Se quisermos encontrar um elemento específico, a implementação de pilhas em Java usa .search(e); Para encontrar isso.
System.out.println(stackExample.search(5));
Saída
2
Lembre-se de que isso ocorre porque contamos a partir do topo da pilha e os Java Stack s começam em 1, não em 0 como um Array . Então, olhando para a pilha, é (10) --> (5), e 5 está no número 2. Se você tentar encontrar um elemento que não esteja no Stack , receberá um -1 como saída.
Iterando
Ao trabalhar com qualquer coleção, pode haver momentos em que você precise procurar vários elementos. Para economizar complexidade e ter que pesquisar várias vezes na Pilha , você pode usar a iteração. Como Stack em Java estende a classe List , há várias opções de iteração. Uma das mais fáceis é usar apenas a função ListIterator . ListIterator é bom porque permite percorrer uma pilha de cima para baixo ou de baixo para cima usando .hasPrevious() ou .hasNext() . Veja como fica:
ListIterator<Integer> exampleIterator = stackExample.listIterator(stackExample.size());
while (exampleIterator.hasPrevious()) {
int iteration = exampleIterator.previous();
System.out.println(iteration);
}
Saída
10
5
Lembre-se de que, ao iterar por Stack s em Java, você não remove nenhum elemento dele. A iteração essencialmente permite que você dê uma espiada em cada elemento da pilha em ordem. Ao fazer isso, você pode procurar locais onde certos elementos estão e, em seguida, percorrê-los e manipulá-los. Você pode contar, excluir ou até mesmo alterá-los, se necessário.
GO TO FULL VERSION