Capítulo 4. Conjuntos Introdução Principais operações de conjuntos Principais interfaces de...

38
Conjuntos Capítulo 4

Transcript of Capítulo 4. Conjuntos Introdução Principais operações de conjuntos Principais interfaces de...

Page 1: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

ConjuntosCapítulo 4

Page 2: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Conjuntos Introdução Principais operações

de conjuntos Principais interfaces

de conjuntos A interface Collection A interface Iterator A interface List

A classe ArrayList A classe LinkedList A interface Set A classe HashSet A interface Map A classe HashMap A classe Hashtable

2

Page 3: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Introdução Os arrays são estruturas de dados

simples para armazenamento de conjuntos de informações

São bem eficientes, porém possuem limitações:Arrays possuem tamanho fixo. Não podem

ser aumentados nem diminuídos.Arrays não possuem nenhum mecanismo

que evitam duplicidade.

3

Page 4: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Principais operações de conjuntos O Java possui diversas estruturas de

dados, cada qual com sua particularidade que permitem:

Adicionar novos itensRemover itens existentesLimpar todos os itemDentre outras ações

4

Page 5: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Principais interfaces de conjuntos

Collection<T>add(T) : booleanremove(T) : booleansize() : intclear() : voiditerator() : Iterator<T>

Set<T>List<T>get(int) : Tset(int, T) : Tadd(int, T) : voidremove(int) : T

Map<K, V>put(K, V) : Vget(K) : Vremove(K) : Vclear() : voidsize() : intkeySet() : Set<K>

5

Page 6: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Collection Representa uma porção (coleção) de

objetos.

Podemos adicionar ou excluir objetos de uma collection. Seu tamanho é ajustado dinamicamente.

Através do uso de generics, podemos restringir o tipo dos objetos que serão adicionados à sua collection.

6

Page 7: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Collection – Principais métodos add(T)

Adiciona o elemento T à coleção

remove(T) Remove o elemento T da coleção

size() Retorna o número de itens contidos na coleção

clear() Remove todos os elementos da coleção, tornando-a vazia

iterator() Retorna um objeto “varredor” que nos permite navegar pelos

elementos contidos pela coleção

7

Page 8: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Collection

Collection<Produto> colecaox = new HashSet<Produto>();

Produto p1 = new Produto(1012, “Cerveja em lata”);colecaox.add(p1);

Produto p2 = new Produto(1050, “Biscoito recheado”);colecaox.add(p2);

colecaox.add(new Produto(2034, “Sabão em pó”));

System.out.println(“Quantidade: ” + colecaox.size() + “ itens”);

8

Alguma implementação de Collection

Page 9: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Collection

Collection<Object> colecaoy = new ArrayList<Object>();

colecaoy.add(“Item 1”);colecaoy.add(56);colecaoy.add(false);colecaoy.add(new Date());colecaoy.add(new Produto(2034, “Sabão em pó”));colecaoy.add(new Cliente(“Manuel”, “Rua 15”, “4532-7125”));

System.out.println(“Quantidade: ” + colecaoy.size() + “ itens”);

9

Alguma implementação de Collection

Page 10: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Collection Percorrendo uma coleção com a

interface Iterator

Iterator<Produto> it = colecaox.iterator();

Produto p1 = it.next();Produto p2 = it.next();Produto p3 = it.next();Produto p4 = it.next();Produto p5 = it.next(); . . . . . .

10

Alguma Collection<Produto> previamente preenchida

Page 11: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Collection Percorrendo uma coleção genérica com

a interface Iterator

Iterator<Object> it = colecaoy.iterator();

String item1 = (String) it.next();Integer item2 = (Integer) it.next();Boolean item3 = (Boolean) it.next();Produto item4 = (Produto) it.next();Cliente item5 = (Cliente) it.next(); . . . . . .

11

Alguma Collection<Object> previamente preenchida

Page 12: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Collection Percorrendo uma coleção com a

interface Iterator

Iterator<Funcionario> it = colecao.iterator();

while (it.hasNext()) {Funcionario func = it.next();System.out.println(“Funcionario: ” + func.getNome());

}

12

Alguma Collection<Funcionario> previamente preenchida

Page 13: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Collection Percorrendo uma coleção com for-each

for (Funcionario func : colecao) {System.out.println(“Funcionario: ” + func.getNome());

}

13

Alguma Collection<Funcionario> previamente preenchida

Page 14: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

List Subtipo de Collection que representa uma

coleção indexada de objetos.

Em um List, os objetos são armazenados de forma sequencial, um após o outro.

Cada objeto da lista recebe um índice numérico conforme sua posição.

14

Page 15: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

List

15

0 1 2 3 4

Page 16: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

List – Principais métodosO List possui todos os métodos contidos em Collection, e mais... get(int)

Obtem da lista o item da posição especificada

set(int, T) Substitui o item da posição especificada pelo elemento T

add(int, T) Adiciona (insere) o item T na posição especificada

remove(int) Remove o item da posição especificada

16

Page 17: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

List

List<Cliente> lista = new ArrayList<Cliente>();

lista.add(new Cliente(“João”, “Gold”, “6781-9874”));lista.add(new Cliente(“Manuel”, “Bronze”, “4532-7125”));lista.add(new Cliente(“Joaquim”, “Silver”, “7945-0257”));lista.add(1, new Cliente(“Maria”, “Gold”, “7801-2068”));

Cliente c = lista.get(1);System.out.println(“Cliente 1: ” + c.getNome());

lista.remove(2);System.out.println(“Total de clientes: ” + lista.size());

17

Alguma implementação de List

Page 18: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

List – Principais implementações

LinkedList Armazena cada um de seus elementos em um espaço de memória

que sempre possui uma referência para o próximo item. Mais rápido para inserção/exclusão (insert/remove) Mais lento para obter seus valores (get)

ArrayList Armazena seus elemento em um array interno, reformulando-o a

cada inserção ou remoção. Mais rápido para obter seus valores (get) Mais lento para inserção/exclusão (insert/remove)

Vector Antiga implementação da interface List que garante a integridade de

seus dados quando acessado por processos concorrentes (threads)

18

Page 19: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Set Subtipo de Collection que representa uma

coleção não-indexada de objetos.

Alguns tipos de Set não armazenam seus objetos de forma sequencial. Assim sendo, não podemos garantir que os objetos serão coletados na mesma ordem em que foram adicionados.

Uma coleção do tipo Set não permite a existência de elementos duplicados.

19

Page 20: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Set

20

Page 21: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Set

Set<Funcionario> conjunto = new HashSet<Funcionario>();

conjunto.add(new Funcionario(203, “Maria”));conjunto.add(new Funcionario(112, “Manuel”));conjunto.add(new Funcionario(205, “Joaquim”));conjunto.add(new Funcionario(185, “Maria”));

System.out.println(“Quantidade de funcionarios: ” + conjunto.size());

21

Alguma implementação de Set

Page 22: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Set – Principais implementações HashSet

Armazena cada um de seus elementos em um espaço de memória sempre utilizando os métodos equals() e hashCode() do objeto inserido para comparação com cada um dos objetos já existentes no set.

Trata-se de uma das coleções mais eficientes de todo o framework Java.

LinkedHashSet Implementação da interface Set que armazena seus

elementos na mesma ordem em que foram inseridos.

22

Page 23: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Map Conjunto de dados indexados semelhante

a uma lista (List).

Assim como os outros conjuntos visto neste capítulo, o map possui tamanho dinâmico. Pode ser aumentado e diminuído

Porém...

Também possui índices (chaves), mas estes podem ser Strings ou quaisquer outros objetos.

23

Page 24: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Map

24

Chave Valor

Page 25: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Map

25

“conta” new Conta(2809, 1200.15)“casado”

“nascimento”

“salario”

“idade”

true

15/01/1985

1215.5

27

“nome” “Manuel”

Map<String, Object>

Page 26: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Map

26

“1874309-5”

“3945651-1”

“76836-7”

new Cliente(“1874309-5”, “Maria”, “Alameda XV”)

new Cliente(“3945651-1”, “Joaquim”, “Rua 35”)

new Cliente(“76836-7”, “Ricardo”, “Av. Central, 23”)

“897822-9” new Cliente(“897822-9”, “Manuel”, “Rua 5”)

Map<String, Cliente>

Page 27: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Map – Principais métodos put(K, V)

Adiciona ao map um elemento de chave K e conteúdo V

get(K) Obtém o conteúdo do elemento que possui a chave K

remove(K) Remove do map o elemento que possui chave K

clear() Remove todos os elementos do map, tornando-o vazio

size() Retorna o número de itens contidos no map

keySet() Retorna um Set contendo todas as chaves do map. Tipicamente

utilizado para varrer os elementos do map.27

Page 28: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Map Inserindo elementos em um map

Map<String, Object> mapa = new HashMap<String, Object>();

mapa.put(“nome”, “Manuel”);mapa.put(“idade”, 27);mapa.put(“salario”, 1215.5);mapa.put(“nascimento”, new GregorianCalendar(1985, 0, 15));mapa.put(“casado”, true);mapa.put(“conta”, new Conta(2809, 1200.15));

System.out.println(“Quantidade de itens: ” + mapa.size());

28

Alguma implementação de Map

Page 29: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Map Obtendo elementos de um map

String nome = (String) mapa.get(“nome”);Integer idade = (Idade) mapa.get(“idade”);Double salario = (Double) mapa.get(“salario”);Calendar dataNasc = (Calendar) mapa.get(“nascimento”);Boolean casado = (Boolean) mapa.get(“casado”);Conta conta = (Conta) mapa.get(“conta”);

mapa.remove(“salario”);mapa.remove(“casado”);

System.out.println(“Quantidade de itens: ” + mapa.size());

29

Page 30: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Map Varrendo os elementos de um map

Set<String> chaves = mapa.keySet();

for (String chave : chaves) {System.out.println(“Chave: ” + chave);System.out.println(“Valor: ” + mapa.get(chave));

}

30

Algum Map<String, Object> previamente preenchido

Page 31: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Map – Principais implementações HashMap

Uma simples implementação da interface Map Criada a partir da versão 1.2, sendo mais eficiente que o

antigo Hashtable LinkedHashMap

Implementação da interface Map que armazena seus elementos na ordem em que foram inseridos.

Hashtable Antiga implementação da interface Map Embora menos eficiente, esta implementação garante a

integridade de seus dados quando manipulados por processos concorrentes (threads) da aplicação.

31

Page 32: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Collections (Visão Geral)Collection<T>

add(T) : booleanremove(T) : booleansize() : intclear() : voiditerator() : Iterator<T>

Set<T>List<T>

get(int) : Tset(int, T) : Tadd(int, T) : voidremove(int) : T

32

ArrayList<T>

get(int) : Tset(int, T) : Tadd(int, T) : voidremove(int) : T

LinkedList<T>

get(int) : Tset(int, T) : Tadd(int, T) : voidremove(int) : T

Vector<T>

get(int) : Tset(int, T) : Tadd(int, T) : voidremove(int) : T

HashSet<T>

add(T) : booleanremove(T) : booleansize() : intclear() : voiditerator() : Iterator<T>

LinkedHashSet<T>

Page 33: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Maps (Visão Geral)

33

Map<K, V>

put(K, V) : Vget(K) : Vremove(K) : Vclear() : voidsize() : intkeySet() : Set<K>

HashMap<K, V>

put(K, V) : Vget(K) : Vremove(K) : Vclear() : voidsize() : intkeySet() : Set<K>

LinkedHashMap<K, V>

put(K, V) : Vget(K) : Vremove(K) : Vclear() : voidsize() : intkeySet() : Set<K>

Hashtable<K, V>

put(K, V) : Vget(K) : Vremove(K) : Vclear() : voidsize() : intkeySet() : Set<K>

Page 34: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Exercício 1 Copie para um novo projeto do eclipse as seguintes classes

fornecidas pelo instrutor:

br.com.impacta.funcionario.Funcionario br.com.impacta.funcionario.FuncionarioDialog

A classe FuncionarioDialog possui um método estático showInputFuncionario() utilizado para que o usuário entre com os dados de um funcionário.

Funcionario f = FuncionarioDialog.showInputFuncionario();

34

Page 35: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Exercício 1 (continuação)

Após o usuário digitar os dados e clicar em Ok, o método retornará uma instância da classe Funcionario devidamente preenchida.

Caso o usuário clique no botão Cancelar ou Fechar o método retornará null.

35

Page 36: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Exercício 1 (continuação) Crie no mesmo projeto o pacote br.com.impacta.exercicio e

dentro dele a classe ExercicioList contendo o método main()

Crie uma variável do tipo List<Funcionario> e instancie alguma implementação da interface List

Crie um loop executando diversas vezes o método FuncionarioDialog.showInputFuncionario()

Cada funcionário preenchido deverá ser adicionado à lista.

Quando o usuário clicar em cancelar (retornando null), o loop deverá ser finalizado e a aplicação deverá exibir os dados conforme próximo slide.

36

Page 37: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Exercício 1 (fim)Nome Idade Salário=============== ===== =========Joaquim Souza 52 8.350,45Carlos Alberto 19 970,00Manuel da Silva 37 3.350,00Antônio Nunes 32 12.200,00Maria Antunes 29 2.800,40

Total de funcionários: 5Total de salários : 27.670,85Média de idade : 33,8

37

Page 38: Capítulo 4. Conjuntos  Introdução  Principais operações de conjuntos  Principais interfaces de conjuntos  A interface Collection  A interface Iterator.

Exercício 2 Crie a classe ExercicioSet que faz o

mesmo que a classe ExercicioList do exercício anterior mas, utilize desta vez um Set de funcionário.

Perceba que ao incluir funcionários com a mesmas características a lista elimina duplicidades e o relatório final não exibe funcionários iguais.

38