POO - 23 - Coleções da API do Java

25
Coleções da API do Java e Arrays Fundamentos da Linguagem Java Ludimila Monjardim Casagrande 2012

Transcript of POO - 23 - Coleções da API do Java

Page 1: POO -  23 - Coleções da API do Java

Coleções da API do Java

e Arrays

Fundamentos da Linguagem Java

Ludimila Monjardim Casagrande 2012

Page 2: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 2

Arrays em Java

Um array em Java é uma coleção ordenada de referências para objetos ou de valores de um tipo primitivo ou de outros arrays.

Arrays em Java são homogêneos, isto é, exceto pelas regras de polimorfismo, todos os elementos de um array devem ser do mesmo tipo.

Sendo assim, quando o array é criado, é especificado o tipo dos elementos que ele irá conter.

Page 3: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 3

Arrays em Java

Para criar e usar um array são necessários

três passos:

Declaração;

Construção;

Inicialização.

Page 4: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 4

Declaração de um Array

A sintaxe para a declaração de um array em Java é:

<tipo> <variável>[ ]; ou

<tipo>[ ] <variável>;

Exemplo:

int x[ ]; ou

int[ ] x;

Na declaração não é especificado o tamanho do array.

Page 5: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 5

Criação de um Array

O tamanho do array só é especificado na sua criação, conforme o exemplo abaixo:

x = new int[10]; //obrigatório definir o tamanho

Somente nesse ponto é que o array x foi criado com 10 posições, indexadas de 0 a 9.

Também é permitido declarar e construir o array na mesma linha, por exemplo:

int x[ ] = new int[10];

String[ ] nomes = new String[5];

Page 6: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 6

Criação e Inicialização de um Array

Também é possível construir um array já inicializando-

o com alguns valores.

Veja os exemplos:

int[ ] x = {1, 2, 3, 4, 5};

int[ ] x = new int[ ]{1, 2, 3, 4, 5};

Nesses casos, o vetor será automaticamente criado

com cinco posições e já iniciado com os valores entre

{ e }.

Page 7: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 7

Exemplo de Uso de um Array

public class Array {

public static void main(String[] args){

int[ ] x = new int[10];

x[9] = 8;

//x[10] = 9; //ArrayIndexOutOfBoundsException!!!

System.out.println("O tamanho do array é: " + x.length);

//Laço que insere valores no Array

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

x[i] = i * 2;

}

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

System.out.println("O argumento " + i + " é: " + x[i]); } } }

Page 8: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 8

Coleções em Java

Estruturas de dados são mecanismos para manipular coleções de elementos em um programa.

O pacote java.util oferece algumas classes definidas na API do Java que implementam funcionalidades associadas a estruturas de dados.

Essas classes são conhecidas como “collections” ou “containers”.

Algumas das classes que representam coleções providas pela API do Java são:

Vector, ArrayList, LinkedList

HashSet, TreeSet, entre outras

Page 9: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 9

Hierarquia de Coleções do Java

Collection

Vector

ArrayList

LinkedList

HashSet

TreeSet

List

Set

Interface que representa

uma coleção genérica

Sub-interfaces de

Collection Diferentes

implementações

da interface List

Page 10: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 10

Coleções em Java

A interface Collection é a raiz da hierarquia de

coleções da API do Java.

Algumas coleções permitem a existência de objetos

duplicados, outras não.

Algumas coleções são ordenadas e outras não.

Essas são algumas das características que

classificam as coleções em grupos mais

específicos, tais como, Set e List.

Page 11: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 11

Listas e Conjuntos

List e Set são duas das principais sub-interfaces

da interface Collection.

List é a interface que representa a especificação

de coleções do tipo lista que, por definição,

permitem objetos duplicados e são ordenadas.

Set, por sua vez, representa os conjuntos que,

por definição, não permitem objetos duplicados

e não são necessariamente ordenados.

Page 12: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 12

Interface Collection

Uma Collection não obedece a uma ordem especial e não rejeita objetos duplicados.

A interface Collection define métodos que permitem à adição e remoção de elementos, a contagem desses elementos e a verificação de existência ou não de um determinado elemento na coleção, por exemplo.

Uma coleção simples não impõe restrições quanto ao tipo dos objetos por ela armazenados.

Page 13: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 13

Interface Collection

Principais métodos definidos pela interface Collection:

boolean contains(Object o);

boolean containsAll(Collection c);

boolean add(Object o);

boolean addAll(Collection c);

boolean remove(Object o);

boolean removeAll(Collection c);

boolean isEmpty();

int size();

Object[] toArray();

Observe que os métodos não são relacionados com posição.

Page 14: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 14

Interface List

Uma classe que implementa List representa uma

coleção ordenada que não rejeita duplicatas.

Em algumas listas, a ordem pode ser a ordem na qual

os objetos foram adicionados à coleção, em outras, os

elementos possuem uma “ordem natural” que deve ser

respeitada.

A interface List define métodos relacionados à posição

do elemento na coleção, como:

int indexOf(Object o);

Object get(int index);

void add(int index, Object element);

Object remove(int index);

Page 15: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 15

Interface Set

As classes que implementam a interface Set

devem definir os métodos de adição de

elementos à coleção de modo a não permitir a

inserção de duplicatas.

Alguns conjuntos consideram o valor null como

um elemento válido, no entanto, só pode existir

uma ocorrência de null em toda a coleção.

Page 16: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 16

Classe ArrayList

Para entendermos melhor o uso de uma coleção,

vamos estudar a classe ArrayList que corresponde

a uma das implementações da interface List.

ArrayList é uma classe do Java (package java.util)

usada para armazenar objetos de quaisquer tipos.

Um objeto da classe ArrayList pode ser criado com

um tamanho inicial e, se esse tamanho se tornar

insuficiente, automaticamente o “array” será

aumentado de modo transparente para o usuário da

classe.

Page 17: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 17

Criação de um ArrayList

O exemplo cria um objeto da classe ArrayList,

para armazenar, inicialmente, 15 elementos.

Se nenhum valor é passado no construtor, um

objeto com capacidade para 10 elementos é

criado.

Exemplo:

ArrayList list = new ArrayList(15);

Page 18: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 18

Adição de Elementos ao ArrayList

Para se armazenar uma referência a um objeto

em um ArrayList, a classe fornece o método

add(Object o).

Exemplo:

1.Aluno a = new Aluno(“ana”, “123”, 1);

2.list.add(a);

O método add(Object o) adiciona o objeto

recebido no final do“array”.

Page 19: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 19

Exemplo

import java.util.*;

public class CadAlunos {

private static ArrayList alunos = new ArrayList(1);

public static void main(String[ ] args){

alunos.add(“Alessandro");

alunos.add(“Eliane");

alunos.add(“Miriam");

Aluno a = new Aluno(“Carlos", "123", 1);

alunos.add(a);

}

}

O ArrayList aumenta de tamanho

automaticamente.

O ArrayList permite a inserção de

elementos de diferentes tipos.

Page 20: POO -  23 - Coleções da API do Java

Listas Homogêneas

A partir do Java 5.0, podemos usar o recurso

chamado Generics para restringir as listas a um

determinado tipo de objetos (e não qualquer

Object):

List<Aluno> alunos = new ArrayList<Aluno>();

alunos.add(a1);

alunos.add(a2);

alunos.add(“Pedro”); // isso geraria erro de compilação

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 20

Page 21: POO -  23 - Coleções da API do Java

Listas Homogêneas

O uso de Generics também elimina a

necessidade de casting, já que, seguramente,

todos os objetos inseridos na lista serão do tipo

Aluno:

for(int i = 0; i < alunos.size(); i++) {

Aluno a = alunos.get(i); // sem casting!

System.out.println(a.getNome());

}

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 21

Page 22: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 22

Adição de Elementos ao ArrayList

Existe ainda uma versão do método add que

também recebe um índice.

Exemplo:

list.add(0, a);

Nesse caso o objeto será armazenado na

posição 0.

Se a posição indicada não existir, o método gera

uma exceção IndexOutOfBoundsException.

Page 23: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 23

Recuperação de um Elemento

Para recuperar um objeto de um ArrayList usamos

o método get(int index).

Exemplo:

1. int i = 2;

2. Aluno a = (Aluno)list.get(i); //casting necessário

O método get retorna o objeto armazenado na

posição indicada.

Se o índice especificado não existir, o método

gera uma exceção IndexOutOfBoundsException.

Page 24: POO -  23 - Coleções da API do Java

Coleções e Arrays ©2012 Ludimila Monjardim Casagrande 24

Exemplo

import java.util.*;

public class CadAlunos {

private static ArrayList alunos = new ArrayList(10);

public static void main(String[] args){

Aluno a = new Aluno("André", "andre", "123", 1);

alunos.add(a);

a = new Aluno("Carla", "carla", "456", 2);

alunos.add(a);

a = new Aluno("Cristiane", "cristiane", "789", 3);

alunos.add(2, a);

a = (Aluno)alunos.get(1);

Iterator it = alunos.iterator();

while (it.hasNext()) {

a = (Aluno)it.next();

System.out.println(a); } } }