linguagem java - dei.isep.ipp.ptnfreire/java - contentores.pdf · nelson freire (isep–dei-pprog...

33
Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos Paradigmas da Programação PPROG

Upload: vuphuc

Post on 19-Jul-2018

235 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33

Linguagem JAVA Contentores de Objetos

Paradigmas da Programação PPROG

Page 2: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 2/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 2/33

Noção de Contentor

Categorias de Contentores

Conjunto

Lista

Fila de Espera

Pilha

Mapeamento

Exemplos

Array

ArrayList

Lista Ligada

Sumário Contentores

Page 3: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 3/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 3/33

Estrutura de Dados

Permite armazenar múltiplos objetos

Objeto X

Objeto Y

Objeto Z

Contentor

Noção de Contentor Contentores

Page 4: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 4/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 4/33

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

Conjunto de artigos científicos

Lista (List) Implementa uma sequência:

Há noção de ordem entre elementos

São permitidos elementos repetidos

Pasta de correio electrónico (mensagens guardadas pela ordem de chegada)

Fila de Espera (Queue) Destinada a guardar elementos à espera de serem processados

A ordem de processamento é do tipo FIFO

Conjunto de pedidos de serviço recebidos por um servidor

Pilha (Stack) Destinada a guardar elementos à espera de serem processados

A ordem de processamento é do tipo LIFO

Conjunto de endereços navegados num browser Web

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

Lista Telefónica

Categorias de Contentores Contentores

Page 5: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 5/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 5/33

Noção de Contentor

Categorias de Contentores

Conjunto

Lista

Fila de Espera

Pilha

Mapeamento

Exemplos

Array

ArrayList

Lista Ligada

Sumário Contentores

Page 6: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 6/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 6/33

Guardar uma lista de objetos

Objetos todos do mesmo tipo (ou compatíveis) // ex: só objetos Automovel ou Livro ou Pessoa

Lista de dimensão fixa

Exemplos

Interesse dos Arrays Arrays

Objeto 1

Objeto 2

Objeto 3

...

Objeto N

Tabela Unidimensional (Dimensão 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 Bidimensional (Dimensão NxM)

Page 7: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 7/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 7/33

Unidimensionais

Multidimensionais

Bidimensionais

Tridimensionais

...

Categorias de Arrays Arrays

Page 8: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 8/33

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º inteiro desde 0

0 1 2 3 ... n-2

n-1

objeto objeto objeto X objeto ... objeto objeto

Elemento: 2 Conteúdo: Objeto X

comprimento (ou dimensão) n

elementos

índices

Noção de Array Unidimensional Array Unidimensional

Page 9: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 9/33

Preciso Saber

Declarar um array

Java

Arrays são objetos

Manipular elementos do array

Uso Array Unidimensional

Page 10: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 10/33

Java

tipo nomeArray[ ] = new tipo[ dimensão ];

tipo[ ] nomeArray = new tipo[ dimensão ];

tipo nomeArray[ ]; nomeArray = new tipo[ dimensão ];

Exemplos

Automovel autos[ ] = new Automovel [20];

Automovel[ ] autos = new Automovel [20];

Automovel autos [ ]; autos[ ] = new Automovel[20];

Inicialização dos Elementos

RAM

autos[0]

autos[1]

autos[2]

autos[19]

...

19 = 20-1

Tipo referência: null (Ex: Automovel)

• Array é objeto

• Nome do array é referência de objeto

Declaração de Array Unidimensional Array Unidimensional

Page 11: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 11/33

Java: Array é um Objeto

RAM

autos[0]

autos[1]

autos[2]

autos[19]

...

...

referência de objeto

...

autos

...

Objeto

Nome de Array

• É uma referência do objeto que contém os seus elementos // referência = endereço

Exemplo

• Automovel[] autos = new Automovel[20];

Array Unidimensional

Page 12: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 12/33

Elemento

Pode ser manipulado individualmente

Funciona como uma variável simples

Identificado pelo

Nome do vetor

Índice respetivo

Indicar Elemento

nomeArray[índice]

Exemplo

autos[2]

Manipulações Típicas

Um elemento

Todos elementos

Manipulação de Elementos

RAM

autos[0]

autos[1]

autos[2]

autos[19]

...

...

referência de objeto

...

autos

...

Objeto

Array Unidimensional

Page 13: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 13/33

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];

Manipulação de um Elemento Array Unidimensional

Page 14: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 14/33

nomeArray.length (atributo)

Sintaxe da repetição foreach:

for( Tipo_Elemento variável: nomeArray ){

instruções // sobre variável

}

Indicar todos os n elementos (n = comprimento do array)

for(int i=0; i < nomeArray.length; i++ ){

... nomeArray[i] ...

}

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);

}

Manipulação de Todos os Elementos Array Unidimensional

Page 15: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 15/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 15/33

Noção de Contentor

Categorias de Contentores

Conjunto

Lista

Fila de Espera

Pilha

Mapeamento

Exemplos

Array

ArrayList

Lista Ligada

Sumário Contentores

Page 16: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 16/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 16/33

Classe

Instanciável

Uma instância

Contentor de objetos

Tipo lista

Há ordem nos objetos (1º, 2º, ..., N)

Fornece serviços para gerir objetos

Exemplos

Adicionar objetos

Remover objetos

Tipo coleção

Implementa interface Collection

Objeto X

Objeto Y

Objeto Z

Elemento 1

Elemento 2

Elemento N

Contentor

Noção de ArrayList ArrayList

Elementos contêm Objetos

Page 17: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 17/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 17/33

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

ArrayList Implementação de um ArrayList 1/2

Page 18: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 18/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 18/33

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

ArrayList Implementação de um ArrayList 2/2

Page 19: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 19/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 19/33

RAM

referência

...

Elemento m

...

atributo 1

objeto

atributo N

...

atributo 1

atributo M

...

...

...

objeto

referência Elemento 1

ArrayList

Modelo de Memória ArrayList

Page 20: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 20/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 20/33

ArrayList

Construtores

Métodos de Instância

API (Application Programming Interface) 1/6

Page 21: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 21/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 21/33

Construtores

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

ArrayList

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);

}

}

API (Application Programming Interface) 2/6

Page 22: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 22/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 22/33

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" );

}

}

ArrayList API (Application Programming Interface) 3/6

Page 23: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 23/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 23/33

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();

}

}

ArrayList API (Application Programming Interface) 4/6

Page 24: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 24/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 24/33

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") );

}

}

ArrayList API (Application Programming Interface) 5/6

Page 25: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 25/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 25/33

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++ ){ // tradicional ciclo for sobre arrays

if( nomes.get(i) != null )

System.out.println( nomes.get(i) )

}

...

Object[] nomes = nomes.toArray();

ArrayList API (Application Programming Interface) 6/6

Page 26: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 26/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 26/33

Operações de iteração (varrimento)

Para percorrer todos os elementos da lista

Formas

Ciclo for sobre o índice da lista

Repetição foreach sobre o ArrayList

Sintaxe

Exemplo

ArrayList nomes = new ArrayList();

...

for( int i=0; i < nomes.size(); i++ ){ // tradicional ciclo for sobre arrays

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 ){ // lê-se: para cada obj da lista nomes faz

if( obj!=null ) // arrayList pode ter elementos null

System.out.println( obj );

}

Iterações ArrayList

Page 27: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 27/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 27/33

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" ); // Substitui o 2º jogador

plantel.remove( 0 ); // Remove 1º jogador

plantel.remove( "Cardoso" ); // Remove jogador passado por parâmetro

if( plantel.contains( "Eusébio" ) )

System.out.println( "Eusébio faz parte do plantel" );

else

System.out.println( "Eusébio não faz parte do plantel" );

}

}

Exemplo ArrayList

Page 28: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 28/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 28/33

Noção de Contentor

Categorias de Contentores

Conjunto

Lista

Fila de Espera

Pilha

Mapeamento

Exemplos

Array

ArrayList

Lista Ligada

Sumário Contentores

Page 29: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 29/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 29/33

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

Noção de Lista Ligada Lista Ligada

Objeto 1

Objeto 2

Objeto 3

...

Objeto N

Lista

Page 30: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 30/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 30/33

Constituída por sequência de nós

Nós interligados

Cada nó guarda

Um elemento (objeto) da lista // Java: tipo Object

Referência do próximo nó

Exemplo

Objeto 1

Lista

Objeto 2

Objeto3

Elemento

Próximo Nó

Objeto 1

Nó 2

Objeto 2

Nó 3

Nó 1 Cabeça

Objeto 3

null

Nó 3 Cauda

Nó 2

Nó 1 Nó 2 Nó 3 Nó 4

Cabeça da lista

Cauda da lista

Implementação de uma Lista Ligada Lista Ligada

Page 31: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 31/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 31/33

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

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

Nó 1 Nó 2 Nó 3 Nó 4

Cabeça da lista

Cauda da lista

Serviços Típicos de uma Lista Ligada Lista Ligada

Page 32: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 32/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 32/33

public class TesteListaLigada {

public static void main(String[] args) {

ListaLigada veiculos = new ListaLigada();

Veiculo v1 = new Veiculo(“Nico”);

veiculos.inserirACabeca(v1);

Veiculo v2 = new Veiculo(“Toto”);

veiculos.inserirACabeca(v2);

....

cabeca

veículos

null

tamanho 0

nomeProp v1 Nico

cabeca veículos

Nó 1

tamanho 1

v1

null

Nó 1

nomeProp v2 Toto

cabeca veículos

Nó 2

tamanho 2

v2

Nó 1

Nó 2

v1

null

Nó 1

Exercício da Aula Prática Lista Ligada

Page 33: Linguagem JAVA - dei.isep.ipp.ptnfreire/JAVA - Contentores.pdf · Nelson Freire (ISEP–DEI-PPROG 2012/13) 1/33 Linguagem JAVA Contentores de Objetos PPROG Paradigmas da Programação

Nelson Freire (ISEP–DEI-PPROG 2012/13) 33/33 Nelson Freire (ISEP–DEI-PPROG 2012/13) 33/33

public class TesteListaLigada {

public static void main(String[] args) {

...

veiculos.removerACabeca();

veiculos.removerACabeca();

....

}

}

Nó 1

cabeca veículos

null

tamanho 0

cabeca veículos

Nó 1

tamanho 1

v1

null

Exercício da Aula Prática Lista Ligada