Coleções de Objetos
Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
Programação Orientada a Objetos em Java
Coleções de Objetos
n
É a possibilidade de se trabalhar com um conjunto de objetos, sem precisar de manipula-los um-a-um, individualmente;
n
Desta forma, temos que trabalhar com
estruturas de dados que nos permitem
armazenar e manipular diversos objetos
ao mesmo tempo.
Coleções de Objetos com vetores
n
Seguindo esse conceito, podemos então pensar numa primeira estrutura para isso, que seria os Vetores, que tem essa propriedade de armazenar diversas informações de um mesmo tipo (pois ele é uma estrutura Homogênea).
n
Já vimos como trabalhar com vetores na 2ª unidade de nossa disciplina.
Coleções de Objetos com vetores
n
Relembrando:
n
Para criar um vetor vazio:
Tipo nomedovetor [] = new Tipo[N];
Sendo N o numero de elementos do vetor n
Exemplos:
int vetor[ ] = new int[50]; //cria um vetor de inteiros de 50 elementos
float notas[ ] = new float [80]; // cria um vetor de float de 80 elementos
String nomes[ ] = new String[150]; // cria um vetor de 150 strings
Coleções de Objetos com vetores
n
Toda manipulação do vetor segue a mesma sistemática de qualquer vetor em C:
• Cria-se os índices do vetor de 0 até N-1;
• Utiliza-se FOR para criar os índices e percorrer cada elemento do vetor;
• Lembre-se que há a inicialização de vetores
(vide o material sobre vetores anterior).Coleções de Objetos com vetores
n
Desta forma, seguindo essa ideia, podemos então criar um “Vetor de Objetos”, ou seja, uma variável que possui a capacidade de armazenar e manipular uma grande quantidade de objetos;
• A vantagem: facilita e muito a
manipulação de objetos, através de uma
única variável, ao invés de objeto por
objeto.
Coleções de Objetos com vetores
n Para exemplificarmos, vamos usar a classe Funcionario do Exercício_Aprendizado_java.pdf feito em aulas passadas;
n Suponhamos que precisamos criar 10 objetos funcionários no main(). Logo, podemos fazer:
Funcionario cad [ ] = new Funcionario[10];
n Teríamos criado um vetor “cad” de 10 espaços, porém “vazios”, preparados para armazenar 10 objetos funcionários.
Coleções de Objetos com vetores
n Para criarmos objetos e colocarmos em cada posição do vetor, podemos fazer:
for(int i=0; i< 10; i++) {
Funcionario fc = new Funcionario(); // estamos usando um construtor com entrada de dados
cad[i] = fc;
}
Logo, estamos criando um objeto fc de Funcionário e colocando em uma posição do vetor.
Coleções de Objetos com vetores
n Uma solução melhor, seria usar diretamente a posição do vetor, já que ela terá (e é do tipo) de um objeto Funcionario.
for(int i=0; i< 10; i++) {
cad[i] = new Funcionario();
}
Desta forma, preenchemos todo o vetor com objetos Funcionario, um a um.
Coleções de Objetos com vetores
n Logo cad[ i ] É UM OBJETO Funcionario
cad [i]
exibirFuncionario() calcularSalarioBruto() calcularImposto(taxa) ...
Coleções de Objetos com vetores
n Temos agora um “cadastro de funcionários”, onde cada posição do vetor possui um objeto Funcionario.
Podemos então varrer o vetor para fazermos qualquer manipulação com os objetos que temos, por exemplo:
Mostrar os dados de cada Funcionario:
for(int i=0; i< 10; i++) {
System.ou.println(cad[i].exibir());
}
Coleções de Objetos com vetores
Calcular o imposto de cada Funcionario:
for(int i=0; i< 10; i++) {
System.ou.println("O imposto do funcionário " + cad[i].getNome() + " é igual a " + cad[i].calcularImposto());
}
Coleções de Objetos com vetores
Ou verificar qual funcionário possui o maior salário base:
maior = cad[0].getSalarioBase();
posicao = 0;
for(int i=1; i<10; i++) {
if(cad[i].getSalarioBase() > maior) {
maior = cad[i].getSalarioBase();
posicao = i;
}
}
System.out.println("Funcionário com maior salário é " + cad[posicao].getNome());
Exercício de vetores de objetos
n Use a solução do Exercício de Agregação feito na ultima aula para implementarmos uma solução com vetores de objetos;
n Crie uma nova classe principal (Principal2.java) contendo o método main();
n Crie 2 vetores nessa classe. Um para Cliente outro para Conta;
n Defina a quantidade que você julgar necessário para ambos os vetores;
n Adicione cada Conta do vetor de contas para cada objeto Cliente do vetor de clientes (use o mesmo índice para ambos os objetos, ou seja, cliente[0] para conta[0] - cliente[1] para conta[1] e assim por diante);
n Faça as demais etapas pedidas na classe Principal anterior, usando os vetores.
n
Problema do uso de vetores para coleções:
• Alocação fixa de memória
üPrecisa de se definir o tamanho fixo na criação;
üSe precisar de mais ou menos espaço, não dá para realizar em tempo de execução;
• Implementações para vetores precisam ser feitas separadamente
ü ordenação, busca, inserção e remoção, etc
Uso de Coleções Nativas
Uso de Coleções Nativas
n
Na OO, quando se define uma classe, não só se define as estruturas de dados que ela terá (atributos) como as operações que serão feitas para manipula-las (métodos)
n
Quando se cria um objeto, portanto, ele
já terá as duas coisas: dados +
operações feitas
Uso de Collections
n
Logo, será que a API Java não nos fornece classes (e portanto objetos) já
“prontos” e que podem atender ao objetivo de se trabalhar com coleções de forma DINÂMICA?
n
SIM! São as Collections!
Collections
n
É um conjunto de classes e interfaces do pacote java.util que fornecem inúmeras facilidades para trabalhar com coleções de objetos
n
Existem vários algoritmos de ordenação e detalhes no uso de Collections.
Vamos ver as principais características
para o uso de coleções.
Collections
n
Collections é uma interface que conta com os seguintes métodos :
• isEmpty() – indica se a coleção está vazia
• contains(Object o) – true/false para o caso da coleção conter o objeto
• iterator() – retorna o objeto para iteração pela coleção
Collections em Java
Collections – ArrayList
n
Permite a criação de um “Array” que funciona como uma lista. A grande vantagem é que pode aumentar o tamanho de forma automática, não é estático como os arrays tradicionais.
n
Além disso, é recomendado para
criarmos uma Lista de objetos de um determinado tipo.
Collections – ArrayList
n
Principais métodos:
• add(Object o) – adiciona o objeto passado
• add(int i, Object o) – adiciona o objeto na posição indicada.
• clear() – limpa o arraylist
• get(int i) – retorna o objeto na posição passada
• remove(int i) – remove o objeto na posição indicada
• size() – retorna o tamanho do arraylist
ArrayList - Exemplo
List<Funcionario> list = new ArrayList <Funcionario>( );
list.add(new Funcionario(nome,endereco,telefone,estado) );
Funcionario f;
for (int i = 0; i < list.size(); i++) {
f = list.get(i);
f.aumentarSalario(30);
}