CodeGym /Blogue Java /Random-PT /Java Stack 101: Aprofundando-se na Classe Stack
John Squirrels
Nível 41
San Francisco

Java Stack 101: Aprofundando-se na Classe Stack

Publicado no grupo Random-PT
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
Stack também herda todos os métodos que fazem parte de Vector , incluindo, entre outros, toString() , contains() , indexOf() e lastElement() . Java Stack 101: Aprofundando-se na Classe Stack - 1

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.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION