Mini-tutorial Java 2SE Pilhas (Stack)

Tenho por objetivo ampliar minha rede de aprendizado na linguagem de programação Java e durante as inúmeras trocas de informações tenho percebido a dificuldade de alguns programadores em reconhecer conceitos básicos.

Este é um mini-tutorial de fácil compreensão sobre a estrutura de dados chamada Pilha, que é representada pela classe Stack em Java.

Ao longo do tempo pretendo publicar mais material no fórum. Sugestões e críticas são bem-vindas. A ajuda é recíproca! :wink:

[size=22]Mini-tutorial Java 2SE - Pilhas (Stack): Conceitos[/size]

[size=18]Conceito sucinto de Pilha[/size]

[quote][i]Uma pilha é uma estrutura de dados com padrão de acesso LIFO (Last-In, First-Out), ou seja, o último

elemento que é armazenado é obrigatoriamente o primeiro elemento a ser retirado.

Em Java, pilhas de objetos são implementadas por objetos da classe Stack. Os dois métodos fundamentais

associados a uma estrutura de pilha devem permitir colocar um elemento no topo da pilha (método push()) e retirar o

elemento no topo da pilha (método pop()).

Outras funcionalidades associadas a esta classe incluem os métodos peek() (qual o objeto que está no topo da pilha?),

search() (a que profundidade encontra-se o objeto especificado?) e boolean empty() (pilha está vazia?).[/i]

http://www.dca.fee.unicamp.br/cursos/PooJava/collections/h_stack.html
© Ivan Luiz Marques Ricarte
DCA/FEEC/UNICAMP
Last modified: Fri Apr 25 09:36:33 BRT 2003[/quote]
[size=18]Conceito de LIFO/FILO[/size]

[quote][i] LIFO é um acrônimo para a expressão inglesa Last In, First Out que, em português significa [b]último

a entrar, primeiro a sair[/b]. Em ciência da computação, refere-se a estruturas de dados do tipo pilha. [b]É equivalente a

FILO[/b], que significa First In, Last Out e pode também ser referida como pilha.

O conceito de pilha é amplamente utilizado na informática, como, por exemplo, durante a execução de um programa, para o

armazenamento de valores de variável local a um bloco e também para conter o endereço de retorno do trecho de programa que

chamou a função ou procedimento atualmente em execução.[/i]


Origem: Wikipédia, a enciclopédia livre.[/quote]

[size=22]Mini-tutorial Java 2SE - Pilhas (Stack): Exemplo TestaStack.java[/size]

[size=18]DECLARANDO NOSSOS ELEMENTOS/OBJETOS[/size]

Vamos iniciar nosso programa declarando objetos da classe String, onde cada um receberá um valor inicial baseado em nome próprio. São oito objetos: chan, hasan, chico, arnold, elza, clarice, silvio e richard.

Tais objetos e seus respectivos valores serão incrementados na nossa estrutura de pilha.

[code]public class TestaStack {

public static void main(String[] args) {

	// DECLARANDO NOSSOS ELEMENTOS/OBJETOS
	String chan = "Chan", hassan = "Hassan", chico = "Chico", arnold = "Arnold", elza = "Elza", clarice = 

“Clarice”, silvio = “Silvio”, richard = “Richard”;

}

}[/code]

[size=18]DECLARANDO A PILHA[/size]

No passo anterior declaramos os objetos que serão incrementados na pilha. Agora, vamos declarar a pilha. Tal estrutura corresponde à classe Stack na linguagem de programação Java.

O nosso objeto da classe Stack será nomeado explicitamente de nossaPilha da seguinte maneira: Stack nossaPilha = new Stack();

Uma observação importante é quanto à classe esperada para nossa pilha. Neste caso é informado que durante a criação da pilha ela deverá conter objetos String. Essa particularidade está no nome de classe colocado entre ?<?[/b] e [b]?>?.

[code]import java.util.Stack;

public class TestaStack {

public static void main(String[] args) {

	// DECLARANDO NOSSOS ELEMENTOS/OBJETOS
	String chan = "Chan", hassan = "Hassan", chico = "Chico", arnold = "Arnold", elza = "Elza", clarice = 

“Clarice”, silvio = “Silvio”, richard = “Richard”;

	// DECLARANDO A PILHA
	Stack<String> nossaPilha = new Stack<String>();

}

}[/code]

[size=18]EXIBINDO INFORMAÇÕES SOBRE A PILHA[/size]

Para exibir informações sobre uma pilha, você pode utilizar a instrução System.out.println(nossaPilha);. Entretanto, a saída será sucinta e com os elementos dispostos em ordem crescente e na horizontal. Exemplo: [Chan, Hassan, Chico, Clarice, Silvio, Richard] ( Richard é o topo e Chan é a Base ).

Para uma representação que facilite a compreensão da estrutura da pilha e envolva prática, vamos utilizar o seguinte bloco de instruções:

// EXIBINDO INFORMAÇÕES SOBRE A PILHA if (nossaPilha.isEmpty()) { System.out.println("A PILHA ESTÁ VAZIA!"); } else { System.out .println("NOSSA PILHA...\n\nElemento\tÍndice\n----------------------"); for (int i = nossaPilha.size() - 1; i > -1; i--) { System.out.println(nossaPilha.get(i) + "\t\t" + i); } System.out.println("\nNÚMERO DE ELEMENTOS: " + nossaPilha.size()); System.out.println("ELEMENTO NO TOPO: \"" + nossaPilha.peek() + "\" no índice " + nossaPilha.indexOf(nossaPilha.peek())); }
Inicialmente vamos nos certificar que a pilha contenha elementos, caso o método nossaPilha.isEmpty() retorne o valor booleano true, o usuário será advertido que a pilha está vazia.

Caso a pilha contenha elementos, a repetição for (int i = nossaPilha.size() - 1; i > -1; i–){} percorrerá todos os elementos da lista na forma decrescente, exibindo o valor e índice correspondente. ATENÇÃO: int i = nossaPilha.size() - 1 corresponde o topo da lista, considerando que o método nossaPilha.size() retorna o número de elementos e os índice inicial da pilha é 0, a subtração de 1 elemento é necessária. Em i > -1 informa que a repetição deverá ocorrer até que o índice da pilha seja válido/existente (maior ou igual a 0). O i– é o decremento do índice (não esqueça que a exibição dos elementos será de maneira análoga a objetos empilhados).

Em System.out.println("\nNÚMERO DE ELEMENTOS: " + nossaPilha.size()); o método .size() retorna a quantidade de elementos disponíveis.

Em System.out.println("ELEMENTO NO TOPO: “” + nossaPilha.peek() + “” no índice " + nossaPilha.indexOf(nossaPilha.peek())); o método nossaPilha.peek() retorna o elemento no topo da pilha. Em indexOf(nossaPilha.peek()) teremos o índice do elemento ao topo da pilha.

[color=red]Execute o programa após acrescentar o código citado. Obs. A pilha estará vazia![/color]

[code]import java.util.Stack;

public class TestaStack {

public static void main(String[] args) {

	// DECLARANDO NOSSOS ELEMENTOS/OBJETOS
	String chan = "Chan", hassan = "Hassan", chico = "Chico", arnold = "Arnold", elza = "Elza", clarice = 

“Clarice”, silvio = “Silvio”, richard = “Richard”;

	// DECLARANDO A PILHA
	Stack<String> nossaPilha = new Stack<String>();

	// EXIBINDO INFORMAÇÕES SOBRE A PILHA 
	if (nossaPilha.isEmpty()) {
		System.out.println("A PILHA ESTÁ VAZIA!");
	} else {
		System.out.println("NOSSA PILHA...\n\nElemento\tÍndice\n----------------------");
		for (int i = nossaPilha.size() - 1; i > -1; i--) {
			System.out.println(nossaPilha.get(i) + "\t\t" + i);
		}
		System.out.println("\nNÚMERO DE ELEMENTOS: " + nossaPilha.size());
		System.out.println("ELEMENTO NO TOPO: \"" + nossaPilha.peek() + "\" no índice " + nossaPilha.indexOf

(nossaPilha.peek()));
}

}

}[/code]
[color=red]SAÍDA:[/color]
A PILHA ESTÁ VAZIA!

[size=18]Passo 1: Incrementar Chan[/size]

A partir de agora vamos interagir diretamente na pilha. O primeiro passo será acrescentar elementos a pilha. O método push() é o responsável por incrementar elementos na pilha. O primeiro elemento a ser incrementado será chan: nossaPilha.push(chan);

[color=red]Execute o programa após acrescentar o código citado. Observe a ilustração e a saída do programa![/color]

[code]import java.util.Stack;

public class TestaStack {

public static void main(String[] args) {

	// DECLARANDO NOSSOS ELEMENTOS/OBJETOS
	String chan = "Chan", hassan = "Hassan", chico = "Chico", arnold = "Arnold", elza = "Elza", clarice = 

“Clarice”, silvio = “Silvio”, richard = “Richard”;

	// DECLARANDO A PILHA
	Stack<String> nossaPilha = new Stack<String>();

	// Passo 1: Incrementar Chan
	nossaPilha.push(chan);

	// EXIBINDO INFORMAÇÕES SOBRE A PILHA 
	if (nossaPilha.isEmpty()) {
		System.out.println("A PILHA ESTÁ VAZIA!");
	} else {
		System.out
				.println("NOSSA PILHA...\n\nElemento\tÍndice\n----------------------");
		for (int i = nossaPilha.size() - 1; i > -1; i--) {
			System.out.println(nossaPilha.get(i) + "\t\t" + i);
		}
		System.out.println("\nNÚMERO DE ELEMENTOS: " + nossaPilha.size());
		System.out.println("ELEMENTO NO TOPO: \"" + nossaPilha.peek()
				+ "\" no índice " + nossaPilha.indexOf(nossaPilha.peek()));
	}

}

}[/code]
[color=red]SAÍDA:[/color]
NOSSA PILHA…

Elemento Índice

Chan 0

NÚMERO DE ELEMENTOS: 1
ELEMENTO NO TOPO: “Chan” no índice 0

[size=18]Passo 2: Incrementar Hassan[/size]

Para praticar vamos incrementar hassan: nossaPilha.push(hassan);

[color=red]Execute o programa após acrescentar o código citado. Observe a ilustração e a saída do programa![/color]

[code]import java.util.Stack;

public class TestaStack {

public static void main(String[] args) {

	// DECLARANDO NOSSOS ELEMENTOS/OBJETOS
	String chan = "Chan", hassan = "Hassan", chico = "Chico", arnold = "Arnold", elza = "Elza", clarice = 

“Clarice”, silvio = “Silvio”, richard = “Richard”;

	// DECLARANDO A PILHA
	Stack<String> nossaPilha = new Stack<String>();

	// Passo 1: Incrementar Chan
	nossaPilha.push(chan);

	// Passo 2: Incrementar Hassan
	nossaPilha.push(hassan);

	// EXIBINDO INFORMAÇÕES SOBRE A PILHA 
	if (nossaPilha.isEmpty()) {
		System.out.println("A PILHA ESTÁ VAZIA!");
	} else {
		System.out
				.println("NOSSA PILHA...\n\nElemento\tÍndice\n----------------------");
		for (int i = nossaPilha.size() - 1; i > -1; i--) {
			System.out.println(nossaPilha.get(i) + "\t\t" + i);
		}
		System.out.println("\nNÚMERO DE ELEMENTOS: " + nossaPilha.size());
		System.out.println("ELEMENTO NO TOPO: \"" + nossaPilha.peek()
				+ "\" no índice " + nossaPilha.indexOf(nossaPilha.peek()));
	}

}

}
[/code]
[color=red]SAÍDA:[/color]
NOSSA PILHA…

Elemento Índice

Hassan 1
Chan 0

NÚMERO DE ELEMENTOS: 2
ELEMENTO NO TOPO: “Hassan” no índice 1

[size=18]Passo 3: Incrementar Chico e Elza[/size]

Agora vamos incrementar ]dois elementos: nossaPilha.push(chico) e nossaPilha.push(elza).

[color=red]Execute o programa após acrescentar o código citado. Observe a ilustração e a saída do programa![/color]

[code]import java.util.Stack;

public class TestaStack {

public static void main(String[] args) {

	// DECLARANDO NOSSOS ELEMENTOS/OBJETOS
	String chan = "Chan", hassan = "Hassan", chico = "Chico", arnold = "Arnold", elza = "Elza", clarice = 

“Clarice”, silvio = “Silvio”, richard = “Richard”;

	// DECLARANDO A PILHA
	Stack<String> nossaPilha = new Stack<String>();

	// Passo 1: Incrementar Chan
	nossaPilha.push(chan);

	// Passo 2: Incrementar Hassan
	nossaPilha.push(hassan);

	// Passo 3: Incrementar Chico e Elza
	nossaPilha.push(chico);
	nossaPilha.push(elza);

	// EXIBINDO INFORMAÇÕES SOBRE A PILHA 
	if (nossaPilha.isEmpty()) {
		System.out.println("A PILHA ESTÁ VAZIA!");
	} else {
		System.out
				.println("NOSSA PILHA...\n\nElemento\tÍndice\n----------------------");
		for (int i = nossaPilha.size() - 1; i > -1; i--) {
			System.out.println(nossaPilha.get(i) + "\t\t" + i);
		}
		System.out.println("\nNÚMERO DE ELEMENTOS: " + nossaPilha.size());
		System.out.println("ELEMENTO NO TOPO: \"" + nossaPilha.peek()
				+ "\" no índice " + nossaPilha.indexOf(nossaPilha.peek()));
	}

}

}[/code]
[color=red]SAÍDA:[/color]
NOSSA PILHA…

Elemento Índice

Elza 3
Chico 2
Hassan 1
Chan 0

NÚMERO DE ELEMENTOS: 4
ELEMENTO NO TOPO: “Elza” no índice 3

[size=18]Passo 4: Decrementar elemento Elza do topo[/size]

Este passo consiste em retirar o elemento do topo da pilha. O método pop() é responsável por tal ação. A instrução nossaPilha.pop(); retira o elemento clarice e o topo passa a ser chico.

[color=red]Execute o programa após acrescentar o código citado. Observe a ilustração e a saída do programa![/color]

[code]import java.util.Stack;

public class TestaStack {

public static void main(String[] args) {

	// DECLARANDO NOSSOS ELEMENTOS/OBJETOS
	String chan = "Chan", hassan = "Hassan", chico = "Chico", arnold = "Arnold", elza = "Elza", clarice = 

“Clarice”, silvio = “Silvio”, richard = “Richard”;

	// DECLARANDO A PILHA
	Stack<String> nossaPilha = new Stack<String>();

	// Passo 1: Incrementar Chan
	nossaPilha.push(chan);

	// Passo 2: Incrementar Hassan
	nossaPilha.push(hassan);

	// Passo 3: Incrementar Chico e Elza
	nossaPilha.push(chico);
	nossaPilha.push(elza);

	// Passo 4: Decrementar elemento Elza do topo
	nossaPilha.pop();

	// EXIBINDO INFORMAÇÕES SOBRE A PILHA 
	if (nossaPilha.isEmpty()) {
		System.out.println("A PILHA ESTÁ VAZIA!");
	} else {
		System.out
				.println("NOSSA PILHA...\n\nElemento\tÍndice\n----------------------");
		for (int i = nossaPilha.size() - 1; i > -1; i--) {
			System.out.println(nossaPilha.get(i) + "\t\t" + i);
		}
		System.out.println("\nNÚMERO DE ELEMENTOS: " + nossaPilha.size());
		System.out.println("ELEMENTO NO TOPO: \"" + nossaPilha.peek()
				+ "\" no índice " + nossaPilha.indexOf(nossaPilha.peek()));
	}

}

}[/code]
[color=red]SAÍDA:[/color]
NOSSA PILHA…

Elemento Índice

Chico 2
Hassan 1
Chan 0

NÚMERO DE ELEMENTOS: 3
ELEMENTO NO TOPO: “Chico” no índice 2

[size=18]Passo 5: Incrementar Clarice[/size]

Agora vamos incrementar outro elemento: nossaPilha.push(clarice);

[color=red]Execute o programa após acrescentar o código citado. Observe a ilustração e a saída do programa![/color]

[code]import java.util.Stack;

public class TestaStack {

public static void main(String[] args) {

	// DECLARANDO NOSSOS ELEMENTOS/OBJETOS
	String chan = "Chan", hassan = "Hassan", chico = "Chico", arnold = "Arnold", elza = "Elza", clarice = 

“Clarice”, silvio = “Silvio”, richard = “Richard”;

	// DECLARANDO A PILHA
	Stack<String> nossaPilha = new Stack<String>();

	// Passo 1: Incrementar Chan
	nossaPilha.push(chan);

	// Passo 2: Incrementar Hassan
	nossaPilha.push(hassan);

	// Passo 3: Incrementar Chico e Elza
	nossaPilha.push(chico);
	nossaPilha.push(elza);

	// Passo 4: Decrementar elemento Elza do topo
	nossaPilha.pop();

	// Passo 5: Incrementar Clarice
	nossaPilha.push(clarice);

	// EXIBINDO INFORMAÇÕES SOBRE A PILHA 
	if (nossaPilha.isEmpty()) {
		System.out.println("A PILHA ESTÁ VAZIA!");
	} else {
		System.out
				.println("NOSSA PILHA...\n\nElemento\tÍndice\n----------------------");
		for (int i = nossaPilha.size() - 1; i > -1; i--) {
			System.out.println(nossaPilha.get(i) + "\t\t" + i);
		}
		System.out.println("\nNÚMERO DE ELEMENTOS: " + nossaPilha.size());
		System.out.println("ELEMENTO NO TOPO: \"" + nossaPilha.peek()
				+ "\" no índice " + nossaPilha.indexOf(nossaPilha.peek()));
	}

}

}[/code]
[color=red]SAÍDA:[/color]
NOSSA PILHA…

Elemento Índice

Clarice 3
Chico 2
Hassan 1
Chan 0

NÚMERO DE ELEMENTOS: 4
ELEMENTO NO TOPO: “Clarice” no índice 3

[size=18]Passo 6: Incrementar Silvio e Richard[/size]

Agora vamos incrementar dois elementos: nossaPilha.push(silvio); e nossaPilha.push(richard);.

[color=red]Execute o programa após acrescentar o código citado. Observe a ilustração e a saída do programa![/color]

[code]import java.util.Stack;

public class TestaStack {

public static void main(String[] args) {

	// DECLARANDO NOSSOS ELEMENTOS/OBJETOS
	String chan = "Chan", hassan = "Hassan", chico = "Chico", arnold = "Arnold", elza = "Elza", clarice = 

“Clarice”, silvio = “Silvio”, richard = “Richard”;

	// DECLARANDO A PILHA
	Stack<String> nossaPilha = new Stack<String>();

	// Passo 1: Incrementar Chan
	nossaPilha.push(chan);

	// Passo 2: Incrementar Hassan
	nossaPilha.push(hassan);

	// Passo 3: Incrementar Chico e Elza
	nossaPilha.push(chico);
	nossaPilha.push(elza);

	// Passo 4: Decrementar elemento Elza do topo
	nossaPilha.pop();

	// Passo 5: Incrementar Clarice
	nossaPilha.push(clarice);

	// Passo 6: Incrementar Silvio e Richard
	nossaPilha.push(silvio);
	nossaPilha.push(richard);

	// EXIBINDO INFORMAÇÕES SOBRE A PILHA 
	if (nossaPilha.isEmpty()) {
		System.out.println("A PILHA ESTÁ VAZIA!");
	} else {
		System.out
				.println("NOSSA PILHA...\n\nElemento\tÍndice\n----------------------");
		for (int i = nossaPilha.size() - 1; i > -1; i--) {
			System.out.println(nossaPilha.get(i) + "\t\t" + i);
		}
		System.out.println("\nNÚMERO DE ELEMENTOS: " + nossaPilha.size());
		System.out.println("ELEMENTO NO TOPO: \"" + nossaPilha.peek()
				+ "\" no índice " + nossaPilha.indexOf(nossaPilha.peek()));
	}

}

}
[/code]
[color=red]SAÍDA:[/color]
NOSSA PILHA…

Elemento Índice

Richard 5
Silvio 4
Clarice 3
Chico 2
Hassan 1
Chan 0

NÚMERO DE ELEMENTOS: 6
ELEMENTO NO TOPO: “Richard” no índice 5

[size=18]Passo 7: Substituir elemento na pilha. Chan por Arnold![/size]

Uma das facilidades herdadas da classe Stack é a possibilidade de substituir qualquer elemento da pilha através do método set(). Em nossaPilha.set(0, arnold); vamos substituir o elemento na base chamado chan pelo elemento arnold. Perceba ordem da passagem de parâmetros do método: set(?índice desejado?,?elemento que ira substituir?);.

[color=red]Execute o programa após acrescentar o código citado. Observe a ilustração e a saída do programa![/color]

[code]import java.util.Stack;

public class TestaStack {

public static void main(String[] args) {

	// DECLARANDO NOSSOS ELEMENTOS/OBJETOS
	String chan = "Chan", hassan = "Hassan", chico = "Chico", arnold = "Arnold", elza = "Elza", clarice = 

“Clarice”, silvio = “Silvio”, richard = “Richard”;

	// DECLARANDO A PILHA
	Stack<String> nossaPilha = new Stack<String>();

	// Passo 1: Incrementar Chan
	nossaPilha.push(chan);

	// Passo 2: Incrementar Hassan
	nossaPilha.push(hassan);

	// Passo 3: Incrementar Chico e Elza
	nossaPilha.push(chico);
	nossaPilha.push(elza);

	// Passo 4: Decrementar elemento Elza do topo
	nossaPilha.pop();

	// Passo 5: Incrementar Clarice
	nossaPilha.push(clarice);

	// Passo 6: Incrementar Silvio e Richard
	nossaPilha.push(silvio);
	nossaPilha.push(richard);

	// Passo 7: Substituir elemento na pilha. Chan por Arnold!
	nossaPilha.set(0, arnold);

	// EXIBINDO INFORMAÇÕES SOBRE A PILHA 
	if (nossaPilha.isEmpty()) {
		System.out.println("A PILHA ESTÁ VAZIA!");
	} else {
		System.out
				.println("NOSSA PILHA...\n\nElemento\tÍndice\n----------------------");
		for (int i = nossaPilha.size() - 1; i > -1; i--) {
			System.out.println(nossaPilha.get(i) + "\t\t" + i);
		}
		System.out.println("\nNÚMERO DE ELEMENTOS: " + nossaPilha.size());
		System.out.println("ELEMENTO NO TOPO: \"" + nossaPilha.peek()
				+ "\" no índice " + nossaPilha.indexOf(nossaPilha.peek()));
	}

}

}[/code]
[color=red]SAÍDA:[/color]
NOSSA PILHA…

Elemento Índice

Richard 5
Silvio 4
Clarice 3
Chico 2
Hassan 1
Arnold 0

NÚMERO DE ELEMENTOS: 6
ELEMENTO NO TOPO: “Richard” no índice 5

[size=18]Passo FINAL: Limpar a pilha![/size]

O último passo é limpar a pilha. O método clear() retira instantaneamente todos os elementos.

[color=red]Execute o programa após acrescentar o código citado. Observe a ilustração e a saída do programa![/color]

[code]import java.util.Stack;

public class TestaStack {

public static void main(String[] args) {

	// DECLARANDO NOSSOS ELEMENTOS/OBJETOS
	String chan = "Chan", hassan = "Hassan", chico = "Chico", arnold = "Arnold", elza = "Elza", clarice = 

“Clarice”, silvio = “Silvio”, richard = “Richard”;

	// DECLARANDO A PILHA
	Stack<String> nossaPilha = new Stack<String>();

	// Passo 1: Incrementar Chan
	nossaPilha.push(chan);

	// Passo 2: Incrementar Hassan
	nossaPilha.push(hassan);

	// Passo 3: Incrementar Chico e Elza
	nossaPilha.push(chico);
	nossaPilha.push(elza);

	// Passo 4: Decrementar elemento Elza do topo
	nossaPilha.pop();

	// Passo 5: Incrementar Clarice
	nossaPilha.push(clarice);

	// Passo 6: Incrementar Silvio e Richard
	nossaPilha.push(silvio);
	nossaPilha.push(richard);

	// Passo 7: Substituir elemento na pilha. Chan por Arnold!
	nossaPilha.set(0, arnold);

	// Passo FINAL: Limpar a pilha
	nossaPilha.clear();

	// EXIBINDO INFORMAÇÕES SOBRE A PILHA 
	if (nossaPilha.isEmpty()) {
		System.out.println("A PILHA ESTÁ VAZIA!");
	} else {
		System.out
				.println("NOSSA PILHA...\n\nElemento\tÍndice\n----------------------");
		for (int i = nossaPilha.size() - 1; i > -1; i--) {
			System.out.println(nossaPilha.get(i) + "\t\t" + i);
		}
		System.out.println("\nNÚMERO DE ELEMENTOS: " + nossaPilha.size());
		System.out.println("ELEMENTO NO TOPO: \"" + nossaPilha.peek()
				+ "\" no índice " + nossaPilha.indexOf(nossaPilha.peek()));
	}

}

}[/code]
[color=red]SAÍDA:[/color]
A PILHA ESTÁ VAZIA!

[size=22]Mini-tutorial Java 2SE - Pilhas (Stack): Exemplo TestaStackSearch[/size]

[size=18]PESQUISANDO: Método search():[/size]

Outro método essencial da classe Stack é o search(). Este recurso localiza valores na pilha, retornando a distância do elemento a partir do topo. Quando não é possível encontrar o valor desejado, o retorno do método será o inteiro negativo -1.

ATENÇÃO: Para compreender essa relação entre a distância do elemento a partir do topo, considere: uma pilha com 6 elementos onde o a distância do elemento no topo é 1 e na base corresponde a 6.

Que tal testar o seguinte programa (agora exibindo a distância de cada elemento em relação ao topo)…

[code]import java.util.Stack;

public class TestaStackSearch {

public static void main(String[] args) {

	// DECLARANDO NOSSOS ELEMENTOS/OBJETOS
	String chan = "Chan", hassan = "Hassan", chico = "Chico", arnold = "Arnold", elza = "Elza", clarice = 

“Clarice”, silvio = “Silvio”, richard = “Richard”;

	// DECLARANDO A PILHA
	Stack<String> nossaPilha = new Stack<String>();

	// Passo 1: Incrementar Chan
	nossaPilha.push(arnold);
	nossaPilha.push(hassan);
	nossaPilha.push(chico);
	nossaPilha.push(clarice);
	nossaPilha.push(silvio);
	nossaPilha.push(richard);

	// EXIBINDO INFORMAÇÕES SOBRE A PILHA
	if (nossaPilha.isEmpty()) {
		System.out.println("A PILHA ESTÁ VAZIA!");
	} else {
		System.out
				.println("NOSSA PILHA...\n\nElemento\tÍndice\tDistância do topo\n-------------------

----------------------");
for (int i = nossaPilha.size() - 1; i > -1; i–) {
System.out.println(nossaPilha.get(i) + “\t\t” + i + “\t”
+ (nossaPilha.size() - i));
}

		System.out.println("\nNÚMERO DE ELEMENTOS: " + nossaPilha.size());
		System.out.println("ELEMENTO NO TOPO: \"" + nossaPilha.peek()
				+ "\" no índice " + nossaPilha.indexOf(nossaPilha.peek()));
	}

}

}[/code]
[color=red]SAÍDA:[/color]
NOSSA PILHA…

Elemento Índice Distância do topo

Richard 5 1
Silvio 4 2
Clarice 3 3
Chico 2 4
Hassan 1 5
Arnold 0 6

NÚMERO DE ELEMENTOS: 6
ELEMENTO NO TOPO: “Richard” no índice 5

… Acrescente o código abaixo antes da exibição das informações da pilha. Perceba o valor da distância a partir do topo em cada um dos elementos pesquisados.

// Localizar System.out.println(nossaPilha.search("Chan")); System.out.println(nossaPilha.search("Richard")); System.out.println(nossaPilha.search("Silvio")); System.out.println(nossaPilha.search("Hassan"));

:oops: No final de semana atualizo com outras considerações! :wink:

Muito massa :smiley: