PPROG Paradigmas da Programação Linguagem JAVA Contentores de Objetos Nelson Freire (ISEP DEI-PPROG 2012/13) 1/33
Contentores Sumário Noção de Contentor Categorias de Contentores Conjunto Lista Fila de Espera Pilha Mapeamento Exemplos Array ArrayList Lista Ligada Nelson Freire (ISEP DEI-PPROG 2012/13) 2/33
Contentores Noção de Contentor Estrutura de Dados Permite armazenar múltiplos objetos Objeto X Objeto Y Contentor Objeto Z Nelson Freire (ISEP DEI-PPROG 2012/13) 3/33
Contentores Categorias de Contentores Tipo Características Exemplo Conjunto (Set) Implementa um conjunto matemático finito: Não há noção de ordem (posição): 1º, 2º, n-ésimo ou último elemento Não são permitidos elementos repetidos Lista (List) Implementa uma sequência: Há noção de ordem entre elementos São permitidos elementos repetidos Fila de Espera (Queue) Destinada a guardar elementos à espera de serem processados A ordem de processamento é do tipo FIFO Pilha (Stack) Destinada a guardar elementos à espera de serem processados A ordem de processamento é do tipo LIFO Mapeamento (Map) Implementa correspondências unívocas (1 para 1) entre objetos do tipo chave-valor As chaves são o domínio das correspondências e são únicas Conjunto de artigos científicos Pasta de correio electrónico (mensagens guardadas pela ordem de chegada) Conjunto de pedidos de serviço recebidos por um servidor Conjunto de endereços navegados num browser Web Lista Telefónica Nelson Freire (ISEP DEI-PPROG 2012/13) 4/33
Contentores Sumário Noção de Contentor Categorias de Contentores Conjunto Lista Fila de Espera Pilha Mapeamento Exemplos Array ArrayList Lista Ligada Nelson Freire (ISEP DEI-PPROG 2012/13) 5/33
Arrays Guardar uma lista de objetos Interesse dos Arrays Objetos todos do mesmo tipo (ou compatíveis) // ex: só objetos Automovel ou Livro ou Pessoa Lista de dimensão fixa Exemplos Objeto 1 Objeto 2 Objeto 3 Objeto N Objeto 1,1 Objeto 1,M Objeto 2,1 Objeto 2,M Objeto 3,1 Objeto 3,M Objeto N,1 Objeto N,M Tabela Unidimensional (Dimensão N) Tabela Bidimensional (Dimensão NxM) Nelson Freire (ISEP DEI-PPROG 2012/13) 6/33
Arrays Categorias de Arrays Unidimensionais Multidimensionais Bidimensionais Tridimensionais Nelson Freire (ISEP DEI-PPROG 2012/13) 7/33
Array Unidimensional Array Constituído por elementos Nº de elementos (comprimento) é fixo // Dimensão não modificável em tempo de execução Elementos Organizados de forma linear Funcionam como variáveis simples Podem armazenar objetos Todos do mesmo tipo (ou tipos compatíveis) Acesso através de índices Índice Indica posição de um elemento Nº inteiro: [0, comprimento -1] Indexados // Índice; nº Elemento: inteiro desde 2 0 Conteúdo: Objeto X elementos índices Noção de Array Unidimensional objeto objeto objeto X objeto objeto objeto 0 1 2 3 n-2 n-1 comprimento (ou dimensão) n Nelson Freire (ISEP DEI-PPROG 2012/13) 8/33
Array Unidimensional Preciso Saber Uso Declarar um array Java Arrays são objetos Manipular elementos do array Nelson Freire (ISEP DEI-PPROG 2012/13) 9/33
Array Unidimensional Java tipo nomearray[ ] = new tipo[ dimensão ]; tipo[ ] nomearray = new tipo[ dimensão ]; tipo nomearray[ ]; nomearray = new tipo[ dimensão ]; Declaração de Array Unidimensional Array é objeto Nome do array é referência de objeto Exemplos Automovel autos[ ] = new Automovel [20]; Automovel[ ] autos = new Automovel [20]; Automovel autos [ ]; autos[ ] = new Automovel[20]; autos[0] autos[1] autos[2] RAM Inicialização dos Elementos Tipo referência: null (Ex: Automovel) autos[19] 19 = 20-1 Nelson Freire (ISEP DEI-PPROG 2012/13) 10/33
Array Unidimensional Nome de Array Java: Array é um Objeto É uma referência do objeto que contém os seus elementos Exemplo Automovel[] autos = new Automovel[20]; RAM // referência = endereço autos referência de objeto autos[0] autos[1] autos[2] Objeto autos[19] Nelson Freire (ISEP DEI-PPROG 2012/13) 11/33
Array Unidimensional Elemento Manipulação de Elementos Pode ser manipulado individualmente Funciona como uma variável simples Identificado pelo Nome do vetor Índice respetivo Indicar Elemento autos RAM referência de objeto nomearray[índice] Exemplo autos[2] Manipulações Típicas Um elemento Todos elementos autos[0] autos[1] autos[2] autos[19] Objeto Nelson Freire (ISEP DEI-PPROG 2012/13) 12/33
Array Unidimensional Manipulação de um Elemento Atribuir objeto a um elemento Guardar ou atualizar um elemento Sintaxe: nomearray[índice] = objeto; Ex: autos[5] = new Automovel("Toyota"); Atribuir conteúdo de elemento a uma variável Sintaxe: variável = nomearray[índice]; Ex: Automovel a = autos[5]; Nelson Freire (ISEP DEI-PPROG 2012/13) 13/33
Array Unidimensional Indicar todos os n elementos (n = comprimento do array) Manipulação de Todos os Elementos for(int i=0; i < nomearray.length; i++ ){ nomearray[i] nomearray.length (atributo) Ex: Guardar no array n instâncias Automovel for(int i=0; i<autos.length; i++){ autos[i] = new Automovel(); Ex: Mostrar as instâncias Automovel guardadas no array for(int i=0; i<autos.length; i++){ if ( autos[i]!= null ) System.out.println( autos[i] ); // Alternativa com foreach for(automovel a: autos) if ( a!= null ) System.out.println(a); Sintaxe da repetição foreach: for( Tipo_Elemento variável: nomearray ){ instruções // sobre variável Nelson Freire (ISEP DEI-PPROG 2012/13) 14/33
Contentores Sumário Noção de Contentor Categorias de Contentores Conjunto Lista Fila de Espera Pilha Mapeamento Exemplos Array ArrayList Lista Ligada Nelson Freire (ISEP DEI-PPROG 2012/13) 15/33
ArrayList Classe Noção de ArrayList Instanciável Uma instância Contentor de objetos Tipo lista Há ordem nos objetos (1º, 2º,, N) Elemento 1 Elemento 2 Elemento N Objeto X Objeto Y Objeto Z Contentor Elementos contêm Objetos Fornece serviços para gerir objetos Exemplos Adicionar objetos Remover objetos Tipo coleção Implementa interface Collection Nelson Freire (ISEP DEI-PPROG 2012/13) 16/33
ArrayList Implementação de um ArrayList 1/2 ArrayList Implementa Array dinâmico // nº de elementos pode variar durante execução de programa Cresce // adicionando novos objetos Decresce // removendo objetos Baseado num array E1 E1 E2 E1 E2 E3 Array Dinâmico E1 E2 Nelson Freire (ISEP DEI-PPROG 2012/13) 17/33
ArrayList Implementação de um ArrayList 2/2 Elementos Tipo Object Compatível com todos os tipos Armazenam qualquer objeto Estrutura de dados indexada Semelhante ao array Índice Indica posição dos elementos Número inteiro desde zero Nelson Freire (ISEP DEI-PPROG 2012/13) 18/33
ArrayList Modelo de Memória RAM ArrayList Elemento 1 Elemento m referência referência objeto objeto atributo 1 atributo N atributo 1 atributo M Nelson Freire (ISEP DEI-PPROG 2012/13) 19/33
ArrayList API (Application Programming Interface) 1/6 Construtores Métodos de Instância Nelson Freire (ISEP DEI-PPROG 2012/13) 20/33
ArrayList Construtores API (Application Programming Interface) 2/6 public ArrayList() // tamanho inicial zero ( nº de objetos adicionados ) // capacidade inicial 10 (nº de elementos alocados) // primeiras 10 adições rápidas (s/ custos realocação) public ArrayList(int capacidade_inicial); // tamanho inicial zero public ArrayList(Collection<? extends E> c); // permite copiar arraylist recebido por parâmetro // há partilha de objetos public class ExemploArrayList { public static void main(string[] args) { ArrayList plantel_1 = new ArrayList(); // declaração e instanciação ArrayList plantel_2 = new ArrayList(25); ArrayList plantel_3 = new ArrayList(plantel_2); Nelson Freire (ISEP DEI-PPROG 2012/13) 21/33
ArrayList API (Application Programming Interface) 3/6 Métodos para adicionar objetos boolean add(object obj) adiciona obj no final da lista e incrementa tamanho de 1 unidade retorna true (sucesso) ou false (insucesso) pode ser adicionado null void add(int índice, Object obj) adiciona obj na posição índice desloca uma posição à direita objetos, desde a posição índice Object set(int índice, Object obj) adiciona obj na posição índice se estiver ocupada, objeto atual é substituído se índice >= size() ou < 0, é gerado um erro de execução public class ExemploArrayList { public static void main(string[] args) { ArrayList plantel = new ArrayList(); plantel.add( "Nico" ); plantel.add( "Bruno" ); plantel.add( 1, "Artur" ); plantel.set( 1, "Eduardo" ); Nelson Freire (ISEP DEI-PPROG 2012/13) 22/33
ArrayList API (Application Programming Interface) 4/6 Métodos para remover objetos void clear() remove todos os objetos da lista (tamanho=0, capacidade =) Object remove(int índice) remove objeto na posição índice desloca objetos de índice superior para índice imediata/ inferior boolean remove(object obj) remove a 1ª ocorrência de obj na lista, caso exista desloca objetos de índice superior para índice imediata/ inferior public class ExemploArrayList { public static void main(string[] args) { ArrayList plantel = new ArrayList(); plantel.remove(2); plantel.remove("bruno"); plantel.clear(); Nelson Freire (ISEP DEI-PPROG 2012/13) 23/33
ArrayList API (Application Programming Interface) 5/6 Métodos para pesquisar objetos boolean isempty() retorna true se lista estiver vazia; caso contrário, retorna false boolean contains(object obj) retorna true se obj estiver na lista; caso contrário, retorna false usa o método equals de obj int indexof(object obj) retorna o índice da 1ª ocorrência de obj na lista, caso exista caso não exista, retorna -1; usa o método equals de obj int lastindexof(object obj) semelhante ao anterior, mas relativo à última ocorrência public class ExemploArrayList { public static void main(string[] args) { ArrayList plantel = new ArrayList(); System.out.println( plantel.isempty()? "Não Há Jogo" : "Há Jogo" ); System.out.println( plantel.contains("artur")? "Vence" : "Perde" ); System.out.println( "Posição= " + plantel.indexof("artur") ); Nelson Freire (ISEP DEI-PPROG 2012/13) 24/33
ArrayList API (Application Programming Interface) 6/6 Outros métodos int size() retorna nº de objetos adicionados à lista diferente de capacidade Object get(int índice) retorna objeto guardado na posição índice Object[] toarray() retorna array contendo todos os objetos do arraylist mantém ordem dos objetos ArrayList nomes = new ArrayList(); for( int i=0; i < nomes.size(); i++ ){ if( nomes.get(i)!= null ) System.out.println( nomes.get(i) ) Object[] nomes = nomes.toarray(); // tradicional ciclo for sobre arrays Nelson Freire (ISEP DEI-PPROG 2012/13) 25/33
ArrayList Operações de iteração (varrimento) Para percorrer todos os elementos da lista Iterações Formas Ciclo for sobre o índice da lista ArrayList nomes = new ArrayList(); for( int i=0; i < nomes.size(); i++ ){ Repetição foreach sobre o ArrayList Sintaxe Exemplo if( nomes.get(i)!= null ) System.out.println( nomes.get(i) ) for( Tipo_Elemento variável: nomearraylist ){ instruções // sobre variável for( Object obj : nomes ){ if( obj!=null ) System.out.println( obj ); // tradicional ciclo for sobre arrays // lê-se: para cada obj da lista nomes faz // arraylist pode ter elementos null Nelson Freire (ISEP DEI-PPROG 2012/13) 26/33
ArrayList Exemplo public class ExemploArrayList { public static void main(string[] args) { ArrayList plantel = new ArrayList(); plantel.add( "Nico" ); plantel.add( "John" ); plantel.add( "Cardoso" ); for (Object obj : plantel) { if( obj!=null ) System.out.println(obj); // obj = obj.tostring() System.out.println( "Tamanho do arraylist: " + plantel.size() ); System.out.println( "2º jogador:" + plantel.get( 1 ) ); plantel.set( 1, "Salvio" ); plantel.remove( 0 ); plantel.remove( "Cardoso" ); if( plantel.contains( "Eusébio" ) ) else // Substitui o 2º jogador // Remove 1º jogador // Remove jogador passado por parâmetro System.out.println( "Eusébio faz parte do plantel" ); System.out.println( "Eusébio não faz parte do plantel" ); Nelson Freire (ISEP DEI-PPROG 2012/13) 27/33
Contentores Sumário Noção de Contentor Categorias de Contentores Conjunto Lista Fila de Espera Pilha Mapeamento Exemplos Array ArrayList Lista Ligada Nelson Freire (ISEP DEI-PPROG 2012/13) 28/33
Lista Ligada Noção de Lista Ligada Contentor do tipo Lista Permite guardar uma sequência de objetos Estabelece relação de ordem entre objetos 1º objeto, último objeto, n-ésimo objeto, etc. Permite objetos repetidos Objeto 1 Objeto 2 Objeto 3 Objeto N Lista Nelson Freire (ISEP DEI-PPROG 2012/13) 29/33
Lista Ligada Implementação de uma Lista Ligada Constituída por sequência de nós Nós interligados Nó 1 Nó 2 Nó 3 Nó 4 Cada nó guarda Cabeça da lista Cauda da lista Um elemento (objeto) da lista // Java: tipo Object Referência do próximo nó Elemento Próximo Nó Exemplo Objeto 1 Objeto 2 Objeto3 Objeto 1 Nó 2 Objeto 2 Nó 3 Objeto 3 null Lista Nó 1 Cabeça Nó 2 Nó 3 Cauda Nelson Freire (ISEP DEI-PPROG 2012/13) 30/33
Lista Ligada Serviços Típicos de uma Lista Ligada Inserir objeto Na cabeça da lista Na cauda da lista Na n-ésima posição Remover objeto Na cabeça Na cauda Na n-ésima posição Nó 1 Nó 2 Nó 3 Nó 4 Cabeça da lista Cauda da lista Procurar objeto NOTA Implementação da classe Lista Ligada é transparente para o utilizador dela Utilizador não precisa de saber que objetos são guardados em nós Métodos públicos só passam, por parâmetro, os objetos a armazenar Nelson Freire (ISEP DEI-PPROG 2012/13) 31/33
Lista Ligada Exercício da Aula Prática public class TesteListaLigada { public static void main(string[] args) { ListaLigada veiculos = new ListaLigada(); cabeca veículos null tamanho 0 Veiculo v1 = new Veiculo( Nico ); v1 nomeprop Nico veiculos.inseriracabeca(v1); veículos cabeca Nó 1 tamanho 1 v1 null Veiculo v2 = new Veiculo( Toto ); v2 nomeprop Toto Nó 1 veiculos.inseriracabeca(v2); veículos cabeca Nó 2 tamanho 2 v2 Nó 1 v1 null. Nó 2 Nó 1 Nelson Freire (ISEP DEI-PPROG 2012/13) 32/33
Lista Ligada Exercício da Aula Prática public class TesteListaLigada { public static void main(string[] args) { veiculos.removeracabeca(); veículos cabeca Nó 1 tamanho 1 v1 null Nó 1 veiculos.removeracabeca();. veículos cabeca null tamanho 0 Nelson Freire (ISEP DEI-PPROG 2012/13) 33/33