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<String> nossaPilha = new Stack<String>();

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 “<” e “>”.

[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:

Oi Neves2EE,

excelente iniciativa, parabéns! :wink:

Você poderia ter feito em cima do modelo de tutoriais do Portal Java.

Mas não tem problema, seu tutorial já se encontra como post fixo.

Muito bom mesmo, excelente forma de expor e explicar os diversos detalhes. Paranbéns, continua :slight_smile:

[quote=Carneiro]Oi Neves2EE,

excelente iniciativa, parabéns! :wink:

Você poderia ter feito em cima do modelo de tutoriais do Portal Java.

Mas não tem problema, seu tutorial já se encontra como post fixo.[/quote]

Oi Carneiro

Seria possível disponibilizar esse conteúdo em .PDF para ser baixado mais facilmente?
Se o autor não ser importar posso formator o conteúdo em .PDF e disponibilizar ou pra você ou para o Franklin
Fico no aguardo de sua responta!

Abraço!

Oi Misael,

eu preciso entrar em contato com o autor, já que ele não se pronunciou.

Aguarde meu retorno.

[]s

[quote=Carneiro]Oi Misael,

eu preciso entrar em contato com o autor, já que ele não se pronunciou.

Aguarde meu retorno.

[]s[/quote]

Opa

Aguardo sim Carneiro

Tenho o maior prazer em ajudar no sentido de estudo e pesquisa.

Abraço

Bom topico !
Mais como sou novo nessa area ,
eu queria saber se voçes poderiam min falar alguns comandos e para que serve
no momento eu estava estudando sobre deface mais decidi passa para java
so que nao tenho nosao nenhuma mesmo de java =/

[quote=Carneiro]Oi Misael,

eu preciso entrar em contato com o autor, já que ele não se pronunciou.

Aguarde meu retorno.

[]s[/quote]

Pode utilizar o conteúdo e sem quaisquer restrições! :wink:

Tenho uma questão que não estou entendendo.
Observe o seguinte trecho de código em Java.

import java.util.Stack;

public class MyStack extends Stack {
public void push(int i){
super.push(new Integer(i));
}

public static void main (String[] args){
MyStack stack = new MyStack();

int item1 = 1;
int item2 = 0;
int item3 =4;
stack.push(item2);
stack.push(item1);
stack.push(item1 + item3);
item2 = ((Integer)stack.peek()).intValue();
stack.push(item3 * item3);
stack.push(3);
item1 = ((Integer)stack.peek()).intValue();
while (!stack.isEmpty()){
item1 = ((Integer)stack.peek()).intValue();
stack.pop();
System.out.println(item1);
}
}
}

A classe Stack, pertencente ao pacote java.util, implmenta uma estrutura do tipo LIFO (última a entrar, primeira a sair) e fornece as operações usuais push() e pop(). A classe disponibiliza ainda a oeração peek() que retorna o elemento no topo da pilha sem removê-lo. A sequência de valores impressa pelo programa é:
a) 5, 16, 1
b) 4, 16, 4, 0, 1
c) 5, 8, 5, 1,0
d) 5, 16, 5, 1, 0
e) 4, 0 4, 4 , 1
Resposta: d
Não entendi a resolução da questão.
Começa entrando nesta órdem: 015, a variável item2 recebe o valor do topo da pilha, depois entra no topo 16: (item3 * item3), na linha seguinte era para entrar 0, stack.push(item2), então porque entra 5 como está na órdem na resposta letra d?
Como resolver?
Obrigado