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.
O conceito de empilhamento pode ser tanto em uma perspectiva vertical quanto horizontal.
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);
}
}
}