O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Próximos SlideShares
POO - 13 - Arrays em Java
POO - 13 - Arrays em Java
Carregando em…3
×

Confira estes a seguir

1 de 26 Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

Quem viu também gostou (20)

Anúncio

Semelhante a POO - 14 - Vetores (20)

Mais de Ludimila Monjardim Casagrande (12)

Anúncio

Mais recentes (20)

POO - 14 - Vetores

  1. 1. Fundamentos da Linguagem Java Vetores em Java Implementação de Estruturas de Dados Ludimila Monjardim Casagrande 2012
  2. 2. Vetor  Um vetor é uma lista implementada usando um array.  O que são listas?  Lista é uma estrutura de dados que, por definição, permite objetos duplicados e é ordenada.  Uma estrutura de dados deve definir:  A maneira como o dado será armazenado;  A interface ou operações disponíveis para uso. Vetores em Java ©2012 Ludimila Monjardim Casagrande 2
  3. 3. Vetor  Um array é uma porção de memória fixa e sequencial dividida em pedaços idênticos indexados a partir de 0.  A capacidade de um array é fixa e deve ser informada no momento da criação do array. Vetores em Java ©2012 Ludimila Monjardim Casagrande 3
  4. 4. Vetor de Objetos  Em cada posição do array (ou vetor), podemos guardar um objeto. Na verdade, cada posição pode guardar uma referência para um objeto. Exemplo: Array, vetor ou lista de Alunos. Vetores em Java ©2012 Ludimila Monjardim Casagrande 4
  5. 5. O que vamos implementar?  Vamos implementar um vetor para a listagem de Alunos.  Para isso, precisamos primeiro implementar a classe Aluno.  Em seguida, precisamos definir a interface da lista, isto é, as operações públicas disponíveis para a manipulação de dados nessa estrutura. Vetores em Java ©2012 Ludimila Monjardim Casagrande 5
  6. 6. Classe Aluno package poo.modelo; @Override public class Aluno { public String toString() { private int matricula; return "Aluno [matricula=" + matricula + ", nome=" + nome + "]"; private String nome; } public Aluno(int matricula, String nome) { @Override this.nome = nome; public boolean equals(Object obj) { this.matricula = matricula; if (this == obj) { } return true; } public int getMatricula() { if (obj == null) { return matricula; return false; } } public void setMatricula(int matricula) { if (!(obj instanceof Aluno)) { this.matricula = matricula; return false; } } public String getNome() { Aluno a = (Aluno) obj; return nome; if (matricula != a.matricula) { } return false; } public void setNome(String nome) { return true; Obs.: Incluir o this.nome = nome; } construtor default. } } Vetores em Java ©2012 Ludimila Monjardim Casagrande 6
  7. 7. Operações da Lista  Vamos implementar as seguintes operações:  Adicionar um dado objeto no fim da lista;  Adicionar um dado objeto em uma dada posição;  Recuperar o objeto de uma dada posição;  Remover o objeto de uma dada posição;  Verificar se um dado objeto está contido na lista;  Obter a quantidade de objetos (elementos) da lista.  Imprimir a lista (implementar o método toString()). Vetores em Java ©2012 Ludimila Monjardim Casagrande 7
  8. 8. Estrutura da Classe Vetor package poo.estruturas; public Aluno recupera(int posicao) { import poo.modelo.Aluno; // TODO implementação public class Vetor { return null; /** Declaração e inicialização de um array de } * objetos do tipo Aluno public void remove(int posicao) { * com capacidade para 100 objetos. */ // TODO implementação private Aluno[] alunos = new Aluno[100]; } public boolean contem(Aluno aluno) { /** Numero atual de elementos do array. */ // TODO implementação private int totalDeElementos; return false; } public void adiciona(Aluno aluno) { public int obtemTotalDeElementos() { // TODO implementação // TODO implementação } return 0; public void adiciona(int posicao, Aluno aluno) { } // TODO implementação } Obs.: Incluir também o } método toString(). Vetores em Java ©2012 Ludimila Monjardim Casagrande 8
  9. 9. Considerações sobre o Vetor  Considere que os elementos do vetor devam estar estão todos compactados à esquerda, isto é, não existem posições vazias entre as posições ocupadas. Vetores em Java ©2012 Ludimila Monjardim Casagrande 9
  10. 10. Classes para Teste package poo.testes; import poo.modelo.Aluno; import poo.estruturas.Vetor; public class TesteAdicionaNoFim { public static void main(String[] args) { Aluno a1 = new Aluno(100, "José"); Aluno a2 = new Aluno(200, "João"); Vetor lista = new Vetor(); lista.adiciona(a1); lista.adiciona(a2); System.out.println(lista); Saída esperada: } [Aluno [matricula=100, nome=José], } Aluno [matricula=200, nome=João]] Vetores em Java ©2012 Ludimila Monjardim Casagrande 10
  11. 11. Classes para Teste package poo.testes; import poo.modelo.Aluno; import poo.estruturas.Vetor; public class TesteAdicionaPorPosicao { public static void main(String[] args) { Aluno a1 = new Aluno(101, "Rafael"); Aluno a2 = new Aluno(201, "Paulo"); Aluno a3 = new Aluno(301, "Ana"); Vetor lista = new Vetor(); lista.adiciona(a1); lista.adiciona(0, a2); lista.adiciona(1, a3); Saída esperada: System.out.println(lista); [Aluno [matricula=201, nome=Paulo], } Aluno [matricula=301, nome=Ana], } Aluno [matricula=101, nome=Rafael]] Vetores em Java ©2012 Ludimila Monjardim Casagrande 11
  12. 12. Classes para Teste package poo.testes; import poo.modelo.Aluno; import poo.estruturas.Vetor; public class TesteRecuperaPorPosicao { public static void main(String[] args) { Aluno a1 = new Aluno(101, "Rafael"); Aluno a2 = new Aluno(201, "Paulo"); Vetor lista = new Vetor(); lista.adiciona(a1); lista.adiciona(a2); Aluno aluno1 = lista.recupera(0); Aluno aluno2 = lista.recupera(1); Saída esperada: System.out.println(aluno1); Aluno [matricula=101, nome=Rafael] System.out.println(aluno2); Aluno [matricula=201, nome=Paulo] } } Vetores em Java ©2012 Ludimila Monjardim Casagrande 12
  13. 13. Classes para Teste package poo.testes; import poo.modelo.Aluno; import poo.estruturas.Vetor; public class TesteRemovePorPosicao { public static void main(String[] args) { Aluno a1 = new Aluno(101, "Rafael"); Aluno a2 = new Aluno(201, "Paulo"); Vetor lista = new Vetor(); lista.adiciona(a1); lista.adiciona(a2); lista.remove(0); System.out.println(lista); Saída esperada: } Aluno [matricula=201, nome=Paulo] } Vetores em Java ©2012 Ludimila Monjardim Casagrande 13
  14. 14. Classes para Teste package poo.testes; import poo.modelo.Aluno; import poo.estruturas.Vetor; public class TesteContemAluno { public static void main(String[] args) { Aluno a1 = new Aluno(101, "Rafael"); Aluno a2 = new Aluno(201, "Paulo"); Vetor lista = new Vetor(); lista.adiciona(a1); lista.adiciona(a2); System.out.println(lista.contem(a1)); Saída esperada: System.out.println(lista.contem(a2)); true Aluno a3 = new Aluno(301, "Ana"); true System.out.println(lista.contem(a3)); false } } Vetores em Java ©2012 Ludimila Monjardim Casagrande 14
  15. 15. Classes para Teste package poo.testes; import poo.modelo.Aluno; import poo.estruturas.Vetor; public class TesteRecuperaTamanhoDaLista { public static void main(String[] args) { Aluno a1 = new Aluno(101, "Rafael"); Aluno a2 = new Aluno(201, "Paulo"); Aluno a3 = new Aluno(); Vetor lista = new Vetor(); lista.adiciona(a1); lista.adiciona(a2); Saída esperada: System.out.println(lista.obtemTotalDeElementos()); 2 lista.adiciona(a3); 3 System.out.println(lista.obtemTotalDeElementos()); } } Vetores em Java ©2012 Ludimila Monjardim Casagrande 15
  16. 16. Método: adiciona(Aluno aluno) Possível implementação: Vetores em Java ©2012 Ludimila Monjardim Casagrande 16
  17. 17. Método: adiciona(Aluno aluno)  Problema da implementação anterior:  O consumo de tempo do método piora proporcional- mente na medida em que o número de elementos que existem no vetor aumenta, o que representa um consumo linear de tempo. Vetores em Java ©2012 Ludimila Monjardim Casagrande 17
  18. 18. Complexidade de Algoritmos  Consumo Linear x Consumo Constante:  Consumo (ou complexidade) linear: proporcional ao número de elementos do vetor. Indicado por: O(n).  Consumo (ou complexidade) constante: não varia em função do número de elementos do vetor. Indicado por: O(1). Consumo Linear x Consumo Constante Vetores em Java ©2012 Ludimila Monjardim Casagrande 18
  19. 19. Método: adiciona(Aluno aluno) Implementação alternativa com consumo (complexidade) constante: Quantidade de elementos = Índice da primeira posição vazia Implementação parcial. Ainda falta verificar se o vetor está cheio, isto é, se totalDeAlunos < alunos.length. Vetores em Java ©2012 Ludimila Monjardim Casagrande 19
  20. 20. Método: adiciona(int posicao, Aluno aluno)  Verifique se o vetor está cheio.  Verifique se a posição desejada é válida. As posições válidas são as posições ocupadas e a primeira posição desocupada (=totalDeAlunos). Além disso, a posição desejada deve ser menor do que o tamanho do vetor.  Se a posição desejada for a última posição válida, apenas adicione o elemento nesta posição. Vetores em Java ©2012 Ludimila Monjardim Casagrande 20
  21. 21. Método: adiciona(int posicao, Aluno aluno)  Se a posição desejada for uma posição ocupada, desloque os elementos para a direita até desocupar a posição desejada. Por fim, adicione o elemento nesta posição e incremente o total de alunos. Vetores em Java ©2012 Ludimila Monjardim Casagrande 21
  22. 22. Método: recupera(int posicao)  A dica em relação a esse método é primeiro verificar se a posição desejada é uma posição ocupada, isto é, se a posição pertence ao intervalo de 0 a totalDeAlunos - 1.  Se sim, basta recuperar o objeto desta posição. Vetores em Java ©2012 Ludimila Monjardim Casagrande 22
  23. 23. Método: remove(int posicao)  Verifique se a posição desejada é uma posição ocupada.  Se for, remova o objeto alterando o valor da posição para null.  Em seguida, desloque os objetos à direita do objeto removido uma posição para a esquerda, caso eles existam.  Decremente o número total de alunos. Vetores em Java ©2012 Ludimila Monjardim Casagrande 23
  24. 24. Método: contem(Aluno aluno)  Nesta operação, precisamos comparar o aluno dado com todos os alunos existentes no vetor.  Para isso implemente um laço e compare os objetos usando o método equals. Vetores em Java ©2012 Ludimila Monjardim Casagrande 24
  25. 25. Caixas de Diálogo  Você pode exibir mensagens de erro ou informativas para o usuário usando uma caixa de diálogo da seguinte forma: Vetores em Java ©2012 Ludimila Monjardim Casagrande 25
  26. 26. Referências  CS-14: Algoritmos e Estruturas de Dados em Java. Caelum: Ensino e Inovação. http://www.caelum.com.br/curso/cs-14-algoritmos-estruturas-dados- java/  Capítulo 4 – Arrays. Orientação a Objetos em Java. K19 Treinamentos. http://www.k19.com.br/downloads/apostilas-java.  Capítulo 16 – Collections framework. Caelum: Ensino e Inovação. http://www.caelum.com.br/curso/fj-11-java-orientacao-objetos/ Vetores em Java ©2012 Ludimila Monjardim Casagrande 26

×