curso java 08 - mais sobre coleções

1

Upload: mauricio-linhares

Post on 26-May-2015

907 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Curso java   08 - mais sobre coleções

Mais sobre coleções

André Assad – Maurício Linhares

Page 2: Curso java   08 - mais sobre coleções

O que são Coleções

}  São estruturas de dados }  Vetores (listas) }  Conjuntos }  Pilhas }  Árvores binárias }  Tabelas de hash

}  Oferecem formas diferentes de colecionar dados com base em fatores como }  Eficiência no acesso ou na busca ou na inserção }  Forma de organização dos dados }  Forma de acesso, busca, inserção

Page 3: Curso java   08 - mais sobre coleções

O que fazer com uma Coleção

}  As seguintes operações são básicas para todas as coleções: }  Adicionar objetos }  Remover objetos }  Descobrir se um objeto ou um grupo de objetos faz parte de

uma coleção }  Recuperar um objeto em uma coleção }  Iterar cada elemento de uma coleção a procura de um objeto

Page 4: Curso java   08 - mais sobre coleções

Java Collections API

}  Oferece uma biblioteca de classes e interfaces (no pacote java.util) que }  Implementa as principais estruturas de dados de forma

reutilizável }  Oferece implementações de cursor para iteração (Iterator

pattern) para extrair dados de qualquer estrutura usando uma unica interface

}  Oferece implementações de métodos estáticos utilitários para manipulação de coleções e vetores

Page 5: Curso java   08 - mais sobre coleções

Interfaces e Implementações de Collection

Page 6: Curso java   08 - mais sobre coleções

Interfaces e Implementações de Map, Set e List

Page 7: Curso java   08 - mais sobre coleções

Map, Collection e Collections

}  Apesar de ser conhecida como uma Collection, Map não estende Collection }  Map não é uma Collection

}  Interface java.util.Collection }  É a interface estendida por Set e List

}  Classe java.util.Collections }  Possui vários métodos utilitários e estáticos para serem usados

com classes

}  Referencias }  http://java.sun.com/j2se/1.4.2/docs/guide/collections/

}  http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collections.html

}  http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html

Page 8: Curso java   08 - mais sobre coleções

Exemplos

}  Lista (interface List) }  Pode ter duplicatas

}  Os elementos estão sempre ordenados

●  Conjunto (interface Set) -  Não pode ter duplicatas -  Os elementos não estão ordenados nem classificados

Page 9: Curso java   08 - mais sobre coleções

Exemplos

}  Tabelas (interface Map) }  Os elementos possuem um identificador único

Page 10: Curso java   08 - mais sobre coleções

Coleções Ordenadas e Classificadas

}  As coleções podem ser: }  Não-classificadas (unsorted) e não-ordenadas (unordered) }  Ordenadas, mas não-classificadas }  Ambas ordenadas e classificadas

}  As coleções nunca serão: }  Classificadas e não ordenadas }  Classificar (sorting) é um tipo específico de ordenamento

(ordering)

Page 11: Curso java   08 - mais sobre coleções

Ordenamento

}  Quando uma coleção é ordenada, podemos iterar pelos elementos da coleção de forma ordenada NÃO-aleatória }  Exemplo

}  Uma Hashtable não é ordenada, ele possui um algoritmo interno que determina a ordem de inserção

}  Um LinkedHashSet a ordem dos elementos é definida pela ordem de inserção. Os elementos não podem ser inseridos num índice pre-definido

}  Um ArrayList mantém a ordem definida pelo índice do elemento (como nos arrays). Elementos podem ser inseridos num índice definido pelo desenvolvedor

Page 12: Curso java   08 - mais sobre coleções

Classificação

}  Coleções classificadas são ordenadas pelo tipo de elemento que elas possuem }  Strings são classificados por ordem alfabetica }  Inteiros por ordem numerica }  Outros objetos dependem de implementação }  Se o desenvolvedor desejar implementar a sua ordem ele deve

implementar a classe Comparable

Page 13: Curso java   08 - mais sobre coleções

Exemplo import java.util.*; public class Ordenado {

public static void main (String[] args) { LinkedHashSet lhs = new LinkedHashSet(); lhs.add("Cuiaba"); lhs.add("Amazonas"); lhs.add("Joao Pessoa"); lhs.add("São Paulo"); lhs.add("Rio de Janeiro"); printCollection(lhs); }

}

import java.util.*; public class Classificado {

public static void main (String[] args) { TreeSet ts = new TreeSet(); ts.add("Cuiaba"); ts.add("Amazonas"); ts.add("Joao Pessoa"); ts.add("São Paulo"); ts.add("Rio de Janeiro"); printCollection(ts); }

}

Page 14: Curso java   08 - mais sobre coleções

Classificação em Java

}  Os objetos são ordenáveis pelo seu conteúdo quando eles implementam a interface java.util.Comparable;

}  A interface comparable define um único método, o método “compareTo()” que recebe um único parâmetro e retorna um inteiro: }  Ele deve retornar -1 quando o objeto passado como parâmetro

for maior que o objeto atual; }  0 se ambos os objetos são equivalentes; }  E 1 se o objeto passado como parâmetro for menor que o

objeto atual;

Page 15: Curso java   08 - mais sobre coleções

List

}  As listas possuem controle o índice, a unica diferença da lista para as outras coleções são os métodos de controle de indice }  get(int index), indexOf(), add(int index, Object obj), etc

}  Implementações de List }  ArrayList

}  Considerado um array que pode crescer além da sua capacidade inicial

}  Vector }  Possui o mesmo comportamento do ArrayList, mas os seus métodos

são todos synchronized para acesso multi-thread }  LinkedList

}  Os elementos são duplamente ligados uns aos outros }  Isso permite adição ou remoção no inicio ou fim da lista

Page 16: Curso java   08 - mais sobre coleções

Set

}  Os conjuntos não permitem duplicatas. Isto é verificado pelo equals de cada elemento

}  Implementações de Set }  HashSet

}  É um conjunto não-classificado e não-ordenado. Utiliza o hashCode() de cada objeto

}  LinkedHashSet }  É uma versão ordenada do HashSet

}  TreeSet }  É uma versão classificada do HashSet

Page 17: Curso java   08 - mais sobre coleções

Map

}  Map oferece identificadores únicos (chaves) para cada elemento

}  Implementações de Map

}  HashMap

}  Oferece uma estrutura não-classificada e não-ordenada

}  Hashtable

}  Possui o mesmo comportamento do HashMap, mas os seus métodos são todos synchronized para acesso multi-thread

}  LinkedHashMap }  Mantém a ordem de inserção dos elementos

}  TreeMap }  Estrutura classificada de Map }  Pode-se passar um Comparator em seu construtor para se

classificar os elementos

Page 18: Curso java   08 - mais sobre coleções

Percorrendo uma Coleção

}  Para se percorrer uma coleção usamos o Iterator

HashMap map = new HashMap(); map.put("um", new Coisa("um")); map.put("dois", new Coisa("dois")); map.put("tres", new Coisa("tres")); (...) Iterator it = map.values().iterator(); while(it.hasNext()) { Coisa c = (Coisa)it.next(); System.out.println(c); }

Page 19: Curso java   08 - mais sobre coleções

O que é um iterator?

}  É um padrão de projeto que define a criação de um objeto que sabe navegar em uma coleção, de forma que a implementação da coleção fique transparente para quem a usar;

}  Os iterators em Java são implementações da interface java.util.Iterator;

}  Todas as classes que implementam a interface Collection tem um método que retorna um Iterator para elas;

Page 20: Curso java   08 - mais sobre coleções

Exemplo de List

}  List possui um ListIterator, que pode acessar o inicio, priximo, ou o fim da lista

List lista = new ArrayList(); lista.add(new Coisa("um")); lista.add(new Coisa("dois")); lista.add(new Coisa("tres")); (...) Coisa c3 = lista.get(2); // == índice de vetor ListIterator it = lista.listIterator(); Coisa c = it.last(); Coisa d = it.previous(); Coisa[] coisas = (Coisa[])list.toArray(new Coisa[lista.size()]);

Page 21: Curso java   08 - mais sobre coleções

Set Exemplo

}  Os conjuntos não permitem duplicatas }  O trecho de código abaixo imprime: um, dois, tres

Set conjunto = new HashSet(); conjunto.add("um"); conjunto.add("dois"); conjunto.add("tres"); conjunto.add("um"); conjunto.add("um"); Iterator it = conjunto.iterator(); while(it.hasNext()) { System.out.println(it.next()); }

Page 22: Curso java   08 - mais sobre coleções

Map Exemplo

}  Maps possuem chaves e valores

Map map = new HashMap(); map.put("um", new Coisa("um")); map.put("dois", new Coisa("dois")); (...) Set chaves = map.keySet(); Collection valores = map.values(); (...) Coisa c = (Coisa) map.get("dois"); (...) Set pares = map.entrySet(); Iterator entries = pares.iterator(); Map.Entry one = entries.next(); String chaveOne = (String)one.getKey(); Coisa valueOne = (Coisa)one.getValue();

Page 23: Curso java   08 - mais sobre coleções

Which collection class allows you to grow or shrink its size and provides indexed access to its

elements, but whose methods are not synchronized?

A. java.util.HashSet

B. java.util.LinkedHashSet

C. java.util.List

D. java.util.ArrayList

E. java.util.Vector

Page 24: Curso java   08 - mais sobre coleções

Given the following, 12. TreeSet map = new TreeSet();

13. map.add("one");

14. map.add("two");

15. map.add("three");

16. map.add("four");

17. map.add("one");

18. Iterator it = map.iterator();

19. while (it.hasNext() ) {

20. System.out.print( it.next() + " " );

21. }

what is the result?

A. one two three four B. four three two one

C. four one three two D. one two three four one

E. one four three two one F. The print order is not guaranteed.

Page 25: Curso java   08 - mais sobre coleções

Which collection class allows you to associate its elements with key values, and allows you to

retrieve objects in FIFO (first-in, first-out) sequence?

A. java.util.ArrayList

B. java.util.LinkedHashMap

C. java.util.HashMap

D. java.util.TreeMap

E. java.util.LinkedHashSet

F. java.util.TreeSet