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

  • Published on
    28-Dec-2018

  • View
    214

  • Download
    0

Embed Size (px)

Transcript

<p>Instituto Federal de Educao, Cincia e Tecnologia da Bahia Campus Irec Disciplina: Linguagem Tcnica II Profo Jonatas Bastos </p> <p> Nome: _________________________________________________________________ </p> <p> LISTA DE EXERCCIO 1 Collections Framework </p> <p> 1. Criem um projeto que contenha uma calsse Conta de maneira que ela possua no </p> <p>mnimo um atributo numero; </p> <p>private int numero; </p> <p>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. </p> <p>2. Faa sua classe ContaPoupanca implementar a interface Comparable. Utilize o critrio de ordenar pelo nmero da conta ou pelo seu saldo </p> <p>Deixe o seu mtodo compareTo parecido com este: </p> <p>Material do Treinamento Java e Orientao a Objetos</p> <p>Outros mtodos da classe CollectionsA classe Collections traz uma grande quantidade de mtodos estticos teis na manipulao decolees.</p> <p> binarySearch(List, Object): Realiza uma busca binria por determinado elemento na listaordenada e retorna sua posio ou um nmero negativo, caso no encontrado.</p> <p> max(Collection): Retorna o maior elemento da coleo.</p> <p> min(Collection): Retorna o menor elemento da coleo.</p> <p> reverse(List): Inverte a lista.</p> <p> ...e muitos outros. Consulte a documentao para ver outros metdos.</p> <p>Existe uma classe anloga, a java.util.Arrays, que faz operaes similares com arrays. importante conhec-las para evitar escrever cdigo j existente.</p> <p>16.6 - Exerccios: Ordenao</p> <p>1) Abra sua classe Conta e veja se ela possui o atributo numero. Se no possuir, adicione-o:</p> <p>private int numero;</p> <p>E gere o getter e o setter pelo Eclipse, caso necessrio.</p> <p>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).</p> <p>public class ContaPoupanca extends Conta implements Comparable{</p> <p>...}</p> <p>Repare que o Eclipse prontamente lhe oferecer um quickfix, oferecendo a criao do esqueleto dos mtodosdefinidos na interface Comparable:</p> <p>Deixe o seu mtodo compareTo parecido com este:</p> <p>public class ContaPoupanca extends Conta</p> <p>Captulo 16 - Collections framework - Exerccios: Ordenao - Pgina 193</p> <p>Material do Treinamento Java e Orientao a Objetos</p> <p>Outros mtodos da classe CollectionsA classe Collections traz uma grande quantidade de mtodos estticos teis na manipulao decolees.</p> <p> binarySearch(List, Object): Realiza uma busca binria por determinado elemento na listaordenada e retorna sua posio ou um nmero negativo, caso no encontrado.</p> <p> max(Collection): Retorna o maior elemento da coleo.</p> <p> min(Collection): Retorna o menor elemento da coleo.</p> <p> reverse(List): Inverte a lista.</p> <p> ...e muitos outros. Consulte a documentao para ver outros metdos.</p> <p>Existe uma classe anloga, a java.util.Arrays, que faz operaes similares com arrays. importante conhec-las para evitar escrever cdigo j existente.</p> <p>16.6 - Exerccios: Ordenao</p> <p>1) Abra sua classe Conta e veja se ela possui o atributo numero. Se no possuir, adicione-o:</p> <p>private int numero;</p> <p>E gere o getter e o setter pelo Eclipse, caso necessrio.</p> <p>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).</p> <p>public class ContaPoupanca extends Conta implements Comparable{</p> <p>...}</p> <p>Repare que o Eclipse prontamente lhe oferecer um quickfix, oferecendo a criao do esqueleto dos mtodosdefinidos na interface Comparable:</p> <p>Deixe o seu mtodo compareTo parecido com este:</p> <p>public class ContaPoupanca extends Conta</p> <p>Captulo 16 - Collections framework - Exerccios: Ordenao - Pgina 193</p> <p>3. Crie uma classe TestaOrdenacao, onde voc vai instanciar diversas contas e adicion-las a uma List. Use o Collections.sort() nessa lista: </p> <p>Faa um lao para imprimir todos os nmeros das contas na lista j ordenada: </p> <p>Material do Treinamento Java e Orientao a Objetos</p> <p>implements Comparable {</p> <p>// ... todo o codigo anterior fica aqui</p> <p>public int compareTo(ContaPoupanca o) {if (this.getNumero() &lt; o.getNumero()) {</p> <p>return -1;}if (this.getNumero() &gt; o.getNumero()) {</p> <p>return 1;}return 0;</p> <p>}}</p> <p>Outra implementao...O que acha da implementao abaixo?</p> <p>public int compareTo(ContaPoupanca outra) {</p> <p>return this.getNumero() - outra.getNumero();}</p> <p>3) Crie uma classe TestaOrdenacao, onde voc vai instanciar diversas contas e adicion-las a umaList. Use o Collections.sort() nessa lista:</p> <p>public class TestaOrdenacao {</p> <p>public static void main(String[] args) {</p> <p>List contas = new ArrayList();</p> <p>ContaPoupanca c1 = new ContaPoupanca();c1.setNumero(1973);contas.add(c1);</p> <p>ContaPoupanca c2 = new ContaPoupanca();c2.setNumero(1462);contas.add(c2);</p> <p>ContaPoupanca c3 = new ContaPoupanca();c3.setNumero(1854);contas.add(c3);</p> <p>Collections.sort(contas);}</p> <p>}</p> <p>Faa um lao para imprimir todos os nmeros das contas na lista j ordenada:</p> <p>for (int i = 0; i &lt; contas.size(); i++) {</p> <p>Conta atual = contas.get(i);</p> <p>Captulo 16 - Collections framework - Exerccios: Ordenao - Pgina 194</p> <p>Material do Treinamento Java e Orientao a Objetos</p> <p>implements Comparable {</p> <p>// ... todo o codigo anterior fica aqui</p> <p>public int compareTo(ContaPoupanca o) {if (this.getNumero() &lt; o.getNumero()) {</p> <p>return -1;}if (this.getNumero() &gt; o.getNumero()) {</p> <p>return 1;}return 0;</p> <p>}}</p> <p>Outra implementao...O que acha da implementao abaixo?</p> <p>public int compareTo(ContaPoupanca outra) {</p> <p>return this.getNumero() - outra.getNumero();}</p> <p>3) Crie uma classe TestaOrdenacao, onde voc vai instanciar diversas contas e adicion-las a umaList. Use o Collections.sort() nessa lista:</p> <p>public class TestaOrdenacao {</p> <p>public static void main(String[] args) {</p> <p>List contas = new ArrayList();</p> <p>ContaPoupanca c1 = new ContaPoupanca();c1.setNumero(1973);contas.add(c1);</p> <p>ContaPoupanca c2 = new ContaPoupanca();c2.setNumero(1462);contas.add(c2);</p> <p>ContaPoupanca c3 = new ContaPoupanca();c3.setNumero(1854);contas.add(c3);</p> <p>Collections.sort(contas);}</p> <p>}</p> <p>Faa um lao para imprimir todos os nmeros das contas na lista j ordenada:</p> <p>for (int i = 0; i &lt; contas.size(); i++) {</p> <p>Conta atual = contas.get(i);</p> <p>Captulo 16 - Collections framework - Exerccios: Ordenao - Pgina 194</p> <p>Material do Treinamento Java e Orientao a Objetos</p> <p>implements Comparable {</p> <p>// ... todo o codigo anterior fica aqui</p> <p>public int compareTo(ContaPoupanca o) {if (this.getNumero() &lt; o.getNumero()) {</p> <p>return -1;}if (this.getNumero() &gt; o.getNumero()) {</p> <p>return 1;}return 0;</p> <p>}}</p> <p>Outra implementao...O que acha da implementao abaixo?</p> <p>public int compareTo(ContaPoupanca outra) {</p> <p>return this.getNumero() - outra.getNumero();}</p> <p>3) Crie uma classe TestaOrdenacao, onde voc vai instanciar diversas contas e adicion-las a umaList. Use o Collections.sort() nessa lista:</p> <p>public class TestaOrdenacao {</p> <p>public static void main(String[] args) {</p> <p>List contas = new ArrayList();</p> <p>ContaPoupanca c1 = new ContaPoupanca();c1.setNumero(1973);contas.add(c1);</p> <p>ContaPoupanca c2 = new ContaPoupanca();c2.setNumero(1462);contas.add(c2);</p> <p>ContaPoupanca c3 = new ContaPoupanca();c3.setNumero(1854);contas.add(c3);</p> <p>Collections.sort(contas);}</p> <p>}</p> <p>Faa um lao para imprimir todos os nmeros das contas na lista j ordenada:</p> <p>for (int i = 0; i &lt; contas.size(); i++) {</p> <p>Conta atual = contas.get(i);</p> <p>Captulo 16 - Collections framework - Exerccios: Ordenao - Pgina 194</p> <p>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. </p> <p>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? </p> <p>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? </p> <p>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. </p> <p>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. </p> <p>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: </p> <p>Material do Treinamento Java e Orientao a Objetos</p> <p>System.out.println("numero: " + atual.getNumero());}</p> <p>Ateno especial: repare que escrevemos um mtodo compareTo em nossa classe e nosso cdigo nuncao invoca!! Isto muito comum. Reescrevemos (ou implementamos) um mtodo e quem o invocar ser umoutro conjunto de classes (nesse caso, quem est chamando o compareTo o Collections.sort, que o usacomo 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.Voc poderia escrever o for acima de uma maneira mais sucinta:</p> <p>for (int i = 0; i &lt; contas.size(); i++) {</p> <p>System.out.println("numero: " + contas.get(i).getNumero());}</p> <p>4) O que teria acontecido se a classe ContaPoupanca no implementasse Comparable mastivesse o mtodo compareTo?</p> <p>Faa um teste: remova temporariamente a sentena implements Comparable, no removao mtodo compareTo e veja o que acontece. Basta ter o mtodo, sem assinar a interface?</p> <p>5) Utilize uma LinkedList em vez de ArrayList:</p> <p>List contas = new LinkedList();</p> <p>Precisamos alterar mais algum cdigo para que essa substituio funcione? Rode o programa. Algumadiferena?</p> <p>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?</p> <p>Investigue a documentao da classe Collections dentro do pacote java.util.</p> <p>7) (opcional) Se preferir, insira novas contas atravs de um lao (for). Adivinhe o nome da classe para colocarsaldos aleatrios? Random. Do pacote java.util. Consulte sua documentao para us-la (utilize o mtodonextInt() passando o nmero mximo a ser sorteado).</p> <p>8) (opcional) Imprima a referncia para essa lista. Repare que o toString de uma ArrayList/LinkedList reescrito:</p> <p>System.out.println(contas);</p> <p>9) (opcional) Mude o critrio de comparao da sua ContaPoupanca. Adicione um atributo nomeDoCliente nasua classe (caso ainda no exista algo semelhante) e tente mudar o compareTo para que uma lista deContaPoupanca seja ordenada alfabeticamente pelo atributo nomeDoCliente.</p> <p>Teste a ordenao.</p> <p>Captulo 16 - Collections framework - Exerccios: Ordenao - Pgina 195</p> <p>Troque a ArrayList por um HashSet e verifique o tempo que vai demorar: </p> <p>Collection teste = new HashSet(); </p> <p>O que lento? A insero de 30 mil elementos ou as 30 mil buscas? Descubra computando o tempo gasto em cada for separadamente. </p> <p>9. Repare que, se voc declarar a coleo e der new assim: </p> <p> garantido que vai ter de alterar s essa linha para substituir a implementao por HashSet. Estamos aqui usando o polimorfismo para nos proteger que mudanas de implementao venham nos obrigar a alterar muito cdigo. Mais uma vez: programe voltado a interface, e no implementao! Esse um excelente exemplo de bom uso de interfaces, afinal, de que importa como a coleo funciona? O que queremos uma coleo qualquer, isso suficiente para os nossos propsitos! Nosso cdigo est com baixo acoplamento em relao a estrutura de dados utilizada: podemos troc-la facilmente. </p> <p>Material do Treinamento Java e Orientao a Objetos</p> <p>16.15 - Exerccios: Collections</p> <p>1) Crie um cdigo que insira 30 mil nmeros numa ArrayList e pesquise-os. Vamos usar um mtodo deSystem para cronometrar o tempo gasto:</p> <p>public class TestaPerformance {</p> <p>public static void main(String[] args) {System.out.println("Iniciando...");long inicio = System.currentTimeMillis();Collection teste = new ArrayList();</p> <p>int total = 30000;</p> <p>for (int i = 0; i &lt; total; i++) {teste.add(i);</p> <p>}</p> <p>for (int i = 0; i &lt; total; i++) {teste.contains(i);</p> <p>}</p> <p>long fim = System.currentTimeMillis();long tempo = fim - inicio;System.out.println("Tempo gasto: " + tempo);</p> <p>}}</p> <p>Troque a ArrayList por um HashSet e verifique o tempo que vai demorar:</p> <p>Collection teste = new HashSet();</p> <p>O que lento? A insero de 30 mil elementos ou as 30 mil buscas? Descubra computando o tempo gastoem cada for separadamente.</p> <p>A diferena mais que gritante. Se voc passar de 30 mil para um nmero maior, como 50 ou 100 mil, verque isso inviabiliza por completo o uso de uma List, no caso em que queremos utiliz-la essencialmente empesquisas.</p> <p>2) (conceitual, importante) Repare que, se voc declarar a coleo e der new assim:</p> <p>Collection teste = new ArrayList();</p> <p>em vez de</p> <p>ArrayList teste = new ArrayList();</p> <p> garantido que vai ter de alterar s essa linha para substituir a implementao por HashSet. Estamos aquiusando o polimorfismo para nos proteger que mudanas de implementao venham nos obrigar a alterarmuito cdigo. Mais uma vez: programe voltado a interface, e no implementao! Esse um excelente</p> <p>Captulo 16 - Collections framework - Exerccios: Collections - Pgina 204</p> <p>Material do Treinamento Java e Orientao a Objetos</p> <p>16.15 - Exerccios: Collections</p> <p>1) Crie um cdigo que insira 30 mil nmeros numa ArrayList e pesquise-os. Vamos usar um mtodo deSystem para cronometrar o tempo gasto:</p> <p>public class TestaPerformance {</p> <p>public static void main(String[] args) {System.out.println("Iniciando...");long inicio = System.currentTimeMillis();Collection teste = new ArrayList();</p> <p>int total = 30000;</p> <p>for (int i = 0; i &lt; total; i++) {teste.add(i);</p> <p>}</p> <p>for (int i = 0; i &lt; total; i++) {teste.contains(i);</p> <p>}</p> <p>long fim = System.currentTimeMillis();long tempo = fim - inicio;System.out.println("Tempo gasto: " + tempo);</p> <p>}}</p> <p>Troque a ArrayList por um HashSet e verifique o tempo que vai demorar:</p> <p>Collection teste = new HashSet();</p> <p>O que lento? A insero de 30 mil elementos ou as 30 mil buscas? Descubra computando o tempo gastoem cada for separadamente.</p> <p>A diferena mais que gritante. Se voc passar de 30 mil para um nmero maior, como 50 ou 10...</p>