Você está na página 1de 33

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: Conjunto de artigos
 Não há noção de ordem (posição): 1º, 2º, científicos
n-ésimo ou último elemento
 Não são permitidos elementos repetidos
Lista (List) Implementa uma sequência: Pasta de correio
 Há noção de ordem entre elementos electrónico
(mensagens guardadas
 São permitidos elementos repetidos pela ordem de chegada)
Fila de Espera (Queue) Destinada a guardar elementos à espera de Conjunto de pedidos de
serem processados serviço recebidos por um
A ordem de processamento é do tipo FIFO servidor

Pilha (Stack) Destinada a guardar elementos à espera de Conjunto de endereços


serem processados navegados num browser
A ordem de processamento é do tipo LIFO Web

Mapeamento (Map) Implementa correspondências unívocas (1 para Lista Telefónica


1) entre objetos do tipo chave-valor
As chaves são o domínio das correspondências
e são únicas

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 Interesse dos Arrays
 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

Objeto 1 Objeto 1,1 ... Objeto 1,M

Objeto 2 Objeto 2,1 ... Objeto 2,M

Objeto 3 Objeto 3,1 ... Objeto 3,M

... ... ... ...

Objeto N Objeto N,1 ... Objeto N,M

Tabela Unidimensional Tabela Bidimensional


(Dimensão N) (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 Noção de 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 Elemento:
// Índice; nº 2
inteiro desde 0
Conteúdo: Objeto X
elementos objeto objeto objeto X objeto ... objeto objeto
índices 0 1 2 3 ... n-2 n-1

comprimento (ou dimensão) n

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


Array
Unidimensional Uso
 Preciso Saber

 Declarar um array

 Java
 Arrays são objetos

 Manipular elementos do array

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


Array
Unidimensional Declaração de Array Unidimensional
 Java
tipo nomeArray[ ] = new tipo[ dimensão ]; • Array é objeto
tipo[ ] nomeArray = new tipo[ dimensão ]; • Nome do array é referência de objeto

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

 Exemplos RAM
Automovel autos[ ] = new Automovel [20];
autos[0]
Automovel[ ] autos = new Automovel [20];
autos[1]
Automovel autos [ ];
autos[2]
autos[ ] = new Automovel[20];
...

 Inicialização dos Elementos autos[19] 19 = 20-1

Tipo referência: null (Ex: Automovel)

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


Array
Unidimensional Java: Array é um 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];
RAM
...
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 Manipulação de Elementos
 Elemento
 Pode ser manipulado individualmente
 Funciona como uma variável simples
 Identificado pelo
RAM
 Nome do vetor
...
 Índice respetivo
autos referência de objeto

 Indicar Elemento ...

 nomeArray[índice]
autos[0]
 Exemplo
autos[1]
autos[2]
autos[2]

 Manipulações Típicas ... Objeto

 Um elemento autos[19]

 Todos elementos ...

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 Manipulação de Todos os Elementos
 Indicar todos os n elementos (n = comprimento do array)
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) Sintaxe da repetição foreach:
if ( a != null ) for( Tipo_Elemento variável: nomeArray ){
System.out.println(a);
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 Noção de ArrayList
 Classe
 Instanciável
 Uma instância
 Contentor de objetos
 Tipo lista
 Há ordem nos objetos (1º, 2º, ..., N)

Elemento 1 Objeto X
Elementos
Elemento 2 Objeto Y Contentor contêm
Objetos
Elemento N Objeto Z

 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

E1 E1 E2 E1 E2 E3 E1 E2

Array Dinâmico

 Baseado num array

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
...
Elemento 1 referência

ArrayList ...
Elemento m referência

...

atributo 1

objeto ...
atributo N

...

atributo 1

objeto ...
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 API (Application Programming Interface) 2/6
 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

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++ ){ // tradicional ciclo for sobre arrays
if( nomes.get(i) != null )
System.out.println( nomes.get(i) )
}
...
Object[] nomes = nomes.toArray();

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


ArrayList Iterações
 Operações de iteração (varrimento)
 Para percorrer todos os elementos da lista
 Formas
 Ciclo for sobre o índice da lista
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) )
}

 Repetição foreach sobre o ArrayList


 Sintaxe
for( Tipo_Elemento variável: nomeArrayList ){
instruções // sobre variável
}

 Exemplo
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 );
}

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

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

Cabeça Cauda
da lista da lista
 Cada nó guarda
 Um elemento (objeto) da lista // Java: tipo Object Elemento
 Referência do próximo nó Próximo Nó

 Exemplo

Objeto 1
Objeto 1 Objeto 2 Objeto 3
Objeto 2
Nó 2 Nó 3 null
Objeto3
Lista
Nó 1 Nó 2 Nó 3
Cabeça 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
Nó 1 Nó 2 Nó 3 Nó 4
 Remover objeto
 Na cabeça Cabeça Cauda
da lista da lista
 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

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) { veículos

ListaLigada veiculos = new ListaLigada();


cabeca null

tamanho 0

Veiculo v1 = new Veiculo(“Nico”);


v1 nomeProp Nico

veiculos.inserirACabeca(v1);
cabeca Nó 1 v1
veículos
tamanho 1 null

Nó 1
Veiculo v2 = new Veiculo(“Toto”);
v2 nomeProp Toto

veiculos.inserirACabeca(v2);
cabeca Nó 2 v2 v1
veículos
tamanho 2 Nó 1 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();
cabeca Nó 1 v1
veículos
tamanho 1 null

Nó 1

veiculos.removerACabeca();
cabeca null
veículos
.... tamanho 0
}
}

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