Colecoes

Pilhas

Java Collections - Pilhas

As pilhas são estruturas de dados fundamentais que seguem o princípio LIFO (Last In, First Out), onde o último elemento inserido é o primeiro a ser removido. Podemos implementar as pilhas usando LinkedList ou ArrayDeque.

ℹ️ Informação
O conceito de empilhamento pode ser tanto em uma perspectiva vertical quanto horizontal.

IMG

Deque.java

import java.util.Deque;
import java.util.LinkedList;

public class Pilhas {
    public static void main(String[] args) {
        Deque<String> itensPrateleira = new LinkedList<>();

        itensPrateleira.add("item 01");

        itensPrateleira.add("item 02");
        //itensPrateleira.push("item 02"); //testar

        itensPrateleira.add("item 03");

        itensPrateleira.add("item 04"); //testar
        //itensPrateleira.push("item 04"); //testar
        
        for(String item: itensPrateleira){
            System.out.println(item);
        }
    }
}

Vamos aplicar o conceito de pilha utilizando os métodos mais apropriados:

  • push : empurra o item conforme a proposta de pilha
  • getFirst : obtém o primero elemento que foi inserido por último, em caso de pilha vazia, lança uma exceção
  • getLast : obtém o último elemento que foi inserido primeiro, em caso de pilha vazia, lança uma exceção
  • peekLast : obtém o primero elemento que foi inserido por último, em caso de pilha vazia, lança uma exceção
Deque.java

import java.util.Deque;
import java.util.LinkedList;

public class Pilhas {
    public static void main(String[] args) {
        Deque<String> itensPrateleira = new LinkedList<>();
        //ver add vs push
        itensPrateleira.push("item 01");

        itensPrateleira.push("item 02");
        //itensPrateleira.add("item 02"); //testar

        itensPrateleira.push("item 03");

        itensPrateleira.push("item 04"); //testar
        //itensPrateleira.add("item 04"); //testar

        imprimir(itensPrateleira);

        System.out.println("Visualizando os itens conforme sequencia primeiro / ultimo");
        String itemFrenteTop = itensPrateleira.getFirst(); //recupera MAS não remove
        String itemFundoBaixo = itensPrateleira.getLast(); //recupera MAS não remove, caso pilha vazia, lança uma exceção

        System.out.println("Item da frente ou no topo:" + itemFrenteTop);
        System.out.println("Item da fundo ou em baixo:" +itemFundoBaixo);

        System.out.println("Obtendo (removendo) os itens conforme sequencia primeiro / ultimo");

        itemFrenteTop = itensPrateleira.poll(); //recupera E não remove
        itemFundoBaixo = itensPrateleira.peekLast(); //recupera MAS não remove, caso pilha vazia, retorna null

        System.out.println("Item da frente ou no topo:" + itemFrenteTop);
        System.out.println("Item da fundo ou em baixo:" +itemFundoBaixo);

        imprimir(itensPrateleira);
    }

    static void imprimir(Deque<String> itensPrateleira){
        System.out.println("** Imprimindo os itens da plateleira **");
        for(String item: itensPrateleira){
            System.out.println(item);
        }
    }
}