Coleções Algoritmos e Programação I Java disponibiliza classes que facilitam o agrupamento e processamento de objetos em conjuntos: { Aula 22 { Profa. Márcia Cristina Moraes [email protected] Profa. Sílvia M. W. Moraes [email protected] Prof. Marcelo H. Yamaguti [email protected] Prof. Marco Aurélio de Souza Mangan [email protected] Java Collections Framework { Coleções Coleções (Java Collections Framework). Estruturas de dados + algoritmos para sua manipulação. Arquitetura unificada para representar e manipular coleções, de forma independente dos detalhes de sua representação. 2 Coleções O programador simplesmente utiliza as estruturas de dados sem se preocupar com a maneira como são implementadas. Vantagens: Reutilização de código (implementação mais rápida); { Desempenho superior. De forma simplificada, são objetos capazes de armazenar conjuntos de referências para outros objetos; Correspondem a classes oferecidas na biblioteca padrão de Java; Armazenam referências do tipo Object; { Maior velocidade de execução. Menos memória. 3 4 Material Cedido pelo Prof. Júlio Machado Material Cedido pelo Prof. Júlio Machado Classe ArrayList Genéricos Quando se recupera um elemento de uma coleção, é necessário colocar um cast { { Genéricos { { 5 Inconveniente Inseguro (o compilador não testa o cast, que pode gerar erro durante a execução do programa) Fornecem uma maneira de comunicar o tipo de uma coleção ao compilador para que possa ser verificado Quando o compilador conhece o tipo do elemento da coleção, ele pode verificar se a mesma está sendo usada corretamente e pode inserir os casts corretos nos valores recuperados da coleção 6 Material Cedido pela Profa. Isabel Manssour 1 ArrayList ArrayList são objetos da classe ArrayList. { ArrayList Criando um ArrayList: Construtores ArrayList() – constrói uma lista vazia com capacidade para 10 objetos { ArrayList(int capacidadeInicial) – constrói uma lista vazia com uma capacidade inicial igual ao argumento capacidadeInicial { Utilizamos o pacote java.util.ArrayList import java.util.ArrayList; ArrayList armazena referências a objetos. 7 ArrayList – Exemplo de Utilização dos Construtores com Genéricos 8 ArrayList - Métodos import java.util.*; public class CriacaoArrayListProfessor { public static void main(String args[]){ Inserindo elementos em um ArrayList { public boolean add(E o) { public void add(int index, E element) //Criando um ArrayList com capacidade de armazenamento inicial de //10 elementos da classe Professor ArrayList<Professor> listaTamanhoPadrao = new ArrayList<Professor>(); //Criando um ArrayList com capacidade de armazenamento definida em //5 elementos da classe Professor ArrayList<Professor> listaTamDefinido = new ArrayList<Professor>(5); } } Insere um elemento o no final da lista Insere um elemento na posição index da lista, move os elementos que estiverem na posição index e nas posições subseqüentes para a direita acrescentando 1 no valor do seu índice 9 ArrayList – Exemplo de Utilização dos Métodos add 10 ArrayList – Métodos .... //Criando um ArrayList com capacidade de armazenamento inicial de 10 elementos ArrayList<Professor> lista = new ArrayList<Professor>(10); //Criando instâncias manualmente para a classe Professor Professor p1 = new Professor("Maria Aparecida", 16); Professor p2 = new Professor("Joao Vicente", 12); //Solicitando dados através do Scanner para criação de um professor Scanner teclado = new Scanner(System.in); System.out.println("Digite o nome do professor a ser cadastrado: "); String nome = teclado.nextLine(); System.out.println("Digite a carga horária do professor a ser cadastrado: "); int ch = teclado.nextInt(); Professor p3 = new Professor(nome, ch); Para percorrer os elementos da lista é necessário { public int size() { public E get(int index) //Adicionando os objetos p1 e p2 no ArrayList lista.add(p1); lista.add(p2); Retorna o número de elementos na lista Retorna o elemento que está na posição index da lista. //Adicionando o professor p3 na primeira posicao (posicao 0) do ArrayList lista.add(0,p3); .... 11 12 2 ArrayList – Exemplo de Utilização dos Métodos size e get ArrayList – Métodos .... //Obtem o tamanho atual da lista - quantidade de elementos cadastrados int tamanho = lista.size(); //Percorre a lista a partir do índice 0 até o tamanho System.out.println("Dados dos Professores na Lista Original:"); Professor aux; for(int i = 0; i < tamanho; i++){ Alterando o objeto de uma posição da lista { public E set(int index, E element) Altera o elemento da lista que está na posição index. //recupera um Professor da lista aux = lista.get(i); //imprime os dados do Professor usando toString de //Professor System.out.println(aux); } 13 14 .... ArrayList – Exemplo de Utilização dos Método set ArrayList - Métodos .... //Altera a carga horária do professor //p1 e modifica o professor p1 //na lista, o professor p1 está na //posicao 1 da lista p1.setCargaHoraria(30); lista.set(1, p1); ..... Retirando elementos do ArrayList { public E remove(int index) { Remove um elemento de uma posição específica da lista, descola os elementos subsequentes para a esquerda (subtraindo um do valor de seus índices). public boolean remove(Object o) Remove um objeto da lista, e retorna true se ele estiver presente na lista. 15 16 ArrayList – Exemplo de Utilização dos Método remove ArrayList - Métodos .... //Remove o elemento da posicao 2 - professor cujos dados foram digitados no teclado lista.remove(2); System.out.println("\nDados dos Professores Após a Retirada do Ultimo Professor cadastrado"); for(int i = 0; i < lista.size(); i++){ aux = lista.get(i); System.out.println(aux); } Recuperando índices de objetos contidos na lista { public int indexOf(Object elem) //Tenta renover da lista o professor p2 que já foi removido boolean removeu = lista.remove(p2); if(removeu) System.out.println("\n"+ p2 + "\nRemovido com sucesso da lista."); else System.out.println("\nNão foi possível remover o professor da lista pois ele não foi encontrado na mesma!"); .... 17 { Busca pela primeira ocorrência do argumento elem na lista e retorna o seu índice. public int lastIndexOf(Object elem) Retorna o índice da última ocorrência do argumento elem na lista. 18 3 ArrayList – Exemplo de Utilização dos Método indexOf e lastIndexOf ArrayList - Métodos .... //Criando instâncias manualmente para a classe Professor Professor p1 = new Professor("Maria Aparecida", 16); Professor p2 = new Professor("Joao Vicente", 12); Professor p3 = new Professor("Paulo Ricardo", 40); { //Adicionando os objetos p1 e p2 no ArrayList lista.add(p1); lista.add(p2); lista.add(p3); //Busca o índice do professor p2 int indice = lista.indexOf(p2); System.out.println(p2 + "\nEstá no índice "+ indice + " da lista."); Retorna true se a lista não contém elementos 19 20 ArrayList - Métodos Garantindo a capacidade da lista { public void clear() public boolean isEmpty() Remoção de todos os elementos da lista { Retorna true se a lista contém o elemento Verificando se a lista está vazia { ArrayList - Métodos public boolean contains(Object elem) //Insere mais uma vez o professor p2 na lista lista.add(p2); //Recupera o índice da última ocorrencia do professor p2 System.out.println("\nUltima posicao que professor p2 está cadastrado é: "+ lista.lastIndexOf(p2)); .... Verificação se a lista contém um elemento Remove todos os elementos da lista, a lista estará vazia após a execução deste método. 21 ArrayList – Exemplo de Utilização dos Métodos contains, isEmpty, clear e ensureCapacity public void ensureCapacity(int minCapacity) Aumenta a capacidade da lista para garantir que no mínimo a lista contenha o tamanho mimCapacity Nota: o ArrayList aumenta a sua capacidade automaticamente para que a lista possa crescer na medida em que os elementos são adicionados – custo de realocação de memória. Ensure Capacity reduz este custo. 22 ArrayList – Exemplo de Utilização dos Métodos contains, isEmpty, clear e ensureCapacity .... //Criando um ArrayList com capacidade de armazenamento inicial //de 2 elementos da classe Professor .... //Adicionando os objetos p1, p2 e p3 no ArrayList lista.add(p1); lista.add(p2); lista.add(p3); ArrayList<Professor> lista = new ArrayList<Professor>(2); //Verifica se a lista contém o professor p2 caso a lista não //esteja vazia if(!lista.isEmpty()){ boolean existeLista = lista.contains(p2); if(existeLista) System.out.println("Professor p2 está na lista"); else System.out.println("Professor p2 não está na lista"); } else System.out.println("Lista está vazia"); //Garantindo a capacidade de no mínimo 5 elementos na lista //para reduzir gastos com redimensionamento automático lista.ensureCapacity(5); //Criando instâncias manualmente para a classe Professor Professor p1 = new Professor("Maria Aparecida", 16); Professor p2 = new Professor("Joao Vicente", 12); Professor p3 = new Professor("Paulo Ricardo", 40); .... 23 .... 24 4 ArrayList – Exemplo de Utilização dos Métodos contains, isEmpty, clear e ensureCapacity Maiores Informações sobre Collections .... //Removendo todos os elementos da lista lista.clear(); http://java.sun.com/j2se/1.5.0/docs/gui de/collections/index.html if(lista.isEmpty()) System.out.println("Lista está vazia!"); else System.out.println("Lista não está vazia."); .... 25 26 Referências H.M. Deitel, P.J. Deitel. Java – Como Programar. Ed. Bookman. 4a ed. 2002. Página da Sun. http://java.sun.com/j2se/1.5.0/docs/gui de/language/generics.html 27 5