16.6 - Exercícios: Ordenação .Teste a ordenação. Capítulo 16 - Collections framework - Exercícios:

Embed Size (px)

Text of 16.6 - Exercícios: Ordenação .Teste a ordenação. Capítulo 16 - Collections framework -...

Instituto Federal de Educao, Cincia e Tecnologia da Bahia Campus Irec Disciplina: Linguagem Tcnica II Profo Jonatas Bastos

Nome: _________________________________________________________________

LISTA DE EXERCCIO 1 Collections Framework

1. Criem um projeto que contenha uma calsse Conta de maneira que ela possua no

mnimo um atributo numero;

private int numero;

Alm da classe Conta devem ser criadas duas classes ContaCorrente e ContaPoupana com os respectivos atributos que acharem necessrio (obs: criar os metodos get e set das classes), que herdam da classe conta.

2. Faa sua classe ContaPoupanca implementar a interface Comparable. Utilize o critrio de ordenar pelo nmero da conta ou pelo seu saldo

Deixe o seu mtodo compareTo parecido com este:

Material do Treinamento Java e Orientao a Objetos

Outros mtodos da classe CollectionsA classe Collections traz uma grande quantidade de mtodos estticos teis na manipulao decolees.

binarySearch(List, Object): Realiza uma busca binria por determinado elemento na listaordenada e retorna sua posio ou um nmero negativo, caso no encontrado.

max(Collection): Retorna o maior elemento da coleo.

min(Collection): Retorna o menor elemento da coleo.

reverse(List): Inverte a lista.

...e muitos outros. Consulte a documentao para ver outros metdos.

Existe uma classe anloga, a java.util.Arrays, que faz operaes similares com arrays. importante conhec-las para evitar escrever cdigo j existente.

16.6 - Exerccios: Ordenao

1) Abra sua classe Conta e veja se ela possui o atributo numero. Se no possuir, adicione-o:

private int numero;

E gere o getter e o setter pelo Eclipse, caso necessrio.

2) Faa sua classe ContaPoupanca implementar a interface Comparable. Utilize o critrio deordenar pelo nmero da conta ou pelo seu saldo (como visto no cdigo deste captulo).

public class ContaPoupanca extends Conta implements Comparable{

...}

Repare que o Eclipse prontamente lhe oferecer um quickfix, oferecendo a criao do esqueleto dos mtodosdefinidos na interface Comparable:

Deixe o seu mtodo compareTo parecido com este:

public class ContaPoupanca extends Conta

Captulo 16 - Collections framework - Exerccios: Ordenao - Pgina 193

Material do Treinamento Java e Orientao a Objetos

Outros mtodos da classe CollectionsA classe Collections traz uma grande quantidade de mtodos estticos teis na manipulao decolees.

binarySearch(List, Object): Realiza uma busca binria por determinado elemento na listaordenada e retorna sua posio ou um nmero negativo, caso no encontrado.

max(Collection): Retorna o maior elemento da coleo.

min(Collection): Retorna o menor elemento da coleo.

reverse(List): Inverte a lista.

...e muitos outros. Consulte a documentao para ver outros metdos.

Existe uma classe anloga, a java.util.Arrays, que faz operaes similares com arrays. importante conhec-las para evitar escrever cdigo j existente.

16.6 - Exerccios: Ordenao

1) Abra sua classe Conta e veja se ela possui o atributo numero. Se no possuir, adicione-o:

private int numero;

E gere o getter e o setter pelo Eclipse, caso necessrio.

2) Faa sua classe ContaPoupanca implementar a interface Comparable. Utilize o critrio deordenar pelo nmero da conta ou pelo seu saldo (como visto no cdigo deste captulo).

public class ContaPoupanca extends Conta implements Comparable{

...}

Repare que o Eclipse prontamente lhe oferecer um quickfix, oferecendo a criao do esqueleto dos mtodosdefinidos na interface Comparable:

Deixe o seu mtodo compareTo parecido com este:

public class ContaPoupanca extends Conta

Captulo 16 - Collections framework - Exerccios: Ordenao - Pgina 193

3. Crie uma classe TestaOrdenacao, onde voc vai instanciar diversas contas e adicion-las a uma List. Use o Collections.sort() nessa lista:

Faa um lao para imprimir todos os nmeros das contas na lista j ordenada:

Material do Treinamento Java e Orientao a Objetos

implements Comparable {

// ... todo o codigo anterior fica aqui

public int compareTo(ContaPoupanca o) {if (this.getNumero() < o.getNumero()) {

return -1;}if (this.getNumero() > o.getNumero()) {

return 1;}return 0;

}}

Outra implementao...O que acha da implementao abaixo?

public int compareTo(ContaPoupanca outra) {

return this.getNumero() - outra.getNumero();}

3) Crie uma classe TestaOrdenacao, onde voc vai instanciar diversas contas e adicion-las a umaList. Use o Collections.sort() nessa lista:

public class TestaOrdenacao {

public static void main(String[] args) {

List contas = new ArrayList();

ContaPoupanca c1 = new ContaPoupanca();c1.setNumero(1973);contas.add(c1);

ContaPoupanca c2 = new ContaPoupanca();c2.setNumero(1462);contas.add(c2);

ContaPoupanca c3 = new ContaPoupanca();c3.setNumero(1854);contas.add(c3);

Collections.sort(contas);}

}

Faa um lao para imprimir todos os nmeros das contas na lista j ordenada:

for (int i = 0; i < contas.size(); i++) {

Conta atual = contas.get(i);

Captulo 16 - Collections framework - Exerccios: Ordenao - Pgina 194

Material do Treinamento Java e Orientao a Objetos

implements Comparable {

// ... todo o codigo anterior fica aqui

public int compareTo(ContaPoupanca o) {if (this.getNumero() < o.getNumero()) {

return -1;}if (this.getNumero() > o.getNumero()) {

return 1;}return 0;

}}

Outra implementao...O que acha da implementao abaixo?

public int compareTo(ContaPoupanca outra) {

return this.getNumero() - outra.getNumero();}

3) Crie uma classe TestaOrdenacao, onde voc vai instanciar diversas contas e adicion-las a umaList. Use o Collections.sort() nessa lista:

public class TestaOrdenacao {

public static void main(String[] args) {

List contas = new ArrayList();

ContaPoupanca c1 = new ContaPoupanca();c1.setNumero(1973);contas.add(c1);

ContaPoupanca c2 = new ContaPoupanca();c2.setNumero(1462);contas.add(c2);

ContaPoupanca c3 = new ContaPoupanca();c3.setNumero(1854);contas.add(c3);

Collections.sort(contas);}

}

Faa um lao para imprimir todos os nmeros das contas na lista j ordenada:

for (int i = 0; i < contas.size(); i++) {

Conta atual = contas.get(i);

Captulo 16 - Collections framework - Exerccios: Ordenao - Pgina 194

Material do Treinamento Java e Orientao a Objetos

implements Comparable {

// ... todo o codigo anterior fica aqui

public int compareTo(ContaPoupanca o) {if (this.getNumero() < o.getNumero()) {

return -1;}if (this.getNumero() > o.getNumero()) {

return 1;}return 0;

}}

Outra implementao...O que acha da implementao abaixo?

public int compareTo(ContaPoupanca outra) {

return this.getNumero() - outra.getNumero();}

3) Crie uma classe TestaOrdenacao, onde voc vai instanciar diversas contas e adicion-las a umaList. Use o Collections.sort() nessa lista:

public class TestaOrdenacao {

public static void main(String[] args) {

List contas = new ArrayList();

ContaPoupanca c1 = new ContaPoupanca();c1.setNumero(1973);contas.add(c1);

ContaPoupanca c2 = new ContaPoupanca();c2.setNumero(1462);contas.add(c2);

ContaPoupanca c3 = new ContaPoupanca();c3.setNumero(1854);contas.add(c3);

Collections.sort(contas);}

}

Faa um lao para imprimir todos os nmeros das contas na lista j ordenada:

for (int i = 0; i < contas.size(); i++) {

Conta atual = contas.get(i);

Captulo 16 - Collections framework - Exerccios: Ordenao - Pgina 194

Ateno especial: repare que escrevemos um mtodo compareTo em nossa classe e nosso cdigo nunca o invoca!! Isto muito comum. Reescrevemos (ou implementamos) um mtodo e quem o invocar ser um outro conjunto de classes (nesse caso, quem est chamando o compareTo o Collections.sort, que o usa como base para o algoritmo de ordenao). Isso cria um sistema extremamente coeso e, ao mesmo tempo, com baixo acoplamento: a classe Collections nunca imaginou que ordenaria objetos do tipo ContaPoupanca, mas j que eles so Comparable, o seu mtodo sort est satisfeito.

4. O que teria acontecido se a classe ContaPoupanca no implementasse Comparable mas tivesse o mtodo compareTo? Faa um teste: remova temporariamente a sentena implements Comparable, no remova o mtodo compareTo e veja o que acontece. Basta ter o mtodo, sem assinar a interface?

5. Utilize uma LinkedList em vez de ArrayList: List contas = new LinkedList(); Precisamos alterar mais algum cdigo para que essa substituio funcione? Rode o programa. Alguma diferena?

6. Como posso inverter a ordem de uma lista? Como posso embaralhar todos os elementos de uma lista? Como posso rotacionar os elementos de uma lista? Investigue a documentao da classe Collections dentro do pacote java.util.

7. Mude o critrio de comparao da sua ContaPoupanca. Adicione um atributo nomeDoCliente na sua classe (caso ainda no exista algo semelhante) e tente mudar o compareTo para que uma lista de ContaPoupanca seja ordenada alfabeticamente pelo atributo nomeDoCliente.

8. Crie um cdigo que insira 30 mil nmeros numa ArrayList e pesquise-os. Vamos usar um mtodo de System para cronometrar o tempo gasto:

Material do Treinamento Java e Orientao a Objetos

System.out.println("numero: " + atual.getNumero());}

Ateno especial: repare que escrevemos um mtodo compareTo em n