java 2 collections framework leonardo cole neto. roteiro introdução interfaces implementações...

25
Java 2 Collections Framework Leonardo Cole Neto

Upload: internet

Post on 22-Apr-2015

115 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Java 2 Collections Framework

Leonardo Cole Neto

Page 2: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Roteiro

Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas Comuns

Page 3: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Introdução

O que é uma coleção?Um objeto que agrupa múltiplos elementos

em uma única unidade Usadas para armazenar, recuperar e

manipular elementos que formam um grupo natural.

Ex.: Vector, Hashtable, array (JDK 1.1)

Page 4: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Collections Framework

Conjunto de interfaces, implementações e algoritmos

Vantagens Reduz esforço de programação Aumenta velocidade e qualidade na programação Permite interoperabilidade entre API´s Reduz esforço para aprender uma nova API Reduz esforço para criar uma nova API Promove reuso

Page 5: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Interfaces

Page 6: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Interfaces

São utilizadas sempre que possívelParâmetros de métodosRetorno dos métodos

Permite polimorfismo Existem operações opcionais

UnsupportedOperationException

Page 7: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Collection

Raiz da hierarquia Grupo mais genérico de elementos Não garante nas implementações

Duplicatas Ordenação

Não possui nenhuma implementação direta Iterator, extrutura de navegação

next, hasNext, remove(optional)

Page 8: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Collectionpublic interface Collection { // Basic Operations int size(); boolean isEmpty(); boolean contains(Object element); boolean add(Object element); // Optional boolean remove(Object element); // Optional Iterator iterator();

// Bulk Operations boolean containsAll(Collection c); boolean addAll(Collection c); // Optional boolean removeAll(Collection c); // Optional boolean retainAll(Collection c); // Optional void clear(); // Optional

// Array Operations Object[] toArray(); Object[] toArray(Object a[]);}

Page 9: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Set

Extends Collection Não contém duplicatas Não garante ordem entre os elementos Não acrescenta métodos Caracterização de tipo Operações

Subconjunto (containsAll) União (addAll) Intercessão (reatinaAll) Diferença (removeAll)

Page 10: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

List

Extends Collection Coleção ordenada (Sequência) Pode ter duplicatas Controle na posição de inserção ou remoção Acesso aos elementos pelo índice ListIterator

hasPrevious,previous, nextIndex, previousIndex

Page 11: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Listpublic interface List extends Collection { // Positional Access Object get(int index); Object set(int index, Object element); // Optional void add(int index, Object element); // Optional Object remove(int index); // Optional abstract boolean addAll(int index, Collection c); // Optional

// Search int indexOf(Object o); int lastIndexOf(Object o);

// Iteration ListIterator listIterator(); ListIterator listIterator(int index);

// Range-view List subList(int from, int to);}

Page 12: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Map

Mapeamento de chaves em valores Não possui chaves duplicadas Cada chave leva a somente um elemento Para uma busca efetiva, o objeto da chave

deve reimplementar os métodos:hashCodeequals

Page 13: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Mappublic interface Map { // Basic Operations Object put(Object key, Object value); Object get(Object key); Object remove(Object key); boolean containsKey(Object key); boolean containsValue(Object value); int size(); boolean isEmpty();

// Bulk Operations void putAll(Map t); void clear();

// Collection Views public Set keySet(); public Collection values(); public Set entrySet();

// Interface for entrySet elements public interface Entry { Object getKey(); Object getValue(); Object setValue(Object value); }}

Page 14: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Ordenação de Objetos

java.lang.Comparable Ordem natural compareTo(object)

java.util.Comparator Provê multiplas formas de ordenação compare(object,object)

Retornos Inteiro negativo = menor que Zero = iguais Inteiro positivo = maior que

Não são elementos do framework, apenas estruturas complementares

Page 15: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Ordenação de ObjetosClass Natural Ordering

Byte signed numerical

Character unsigned numerical

Long signed numerical

Integer signed numerical

Short signed numerical

Double signed numerical

Float signed numerical

BigInteger signed numerical

BigDecimal signed numerical

File system-dependent lexicographic on pathname.

String lexicographic

Date chronological

CollationKey locale-specific lexicographic

Page 16: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

SortedSet Extends Set Elementos ordenados de forma ascendente Algumas operações a mais para aproveitar a vantagem da ordenaçãopublic interface SortedSet extends Set { // Range-view SortedSet subSet(Object fromElement, Object

toElement); SortedSet headSet(Object toElement); SortedSet tailSet(Object fromElement);

// Endpoints Object first(); Object last();

// Comparator access Comparator comparator();}

Page 17: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

SortedMap

Extends Map Mapeamento onde as chaves são ordenadas de forma ascendente.public interface SortedMap extends Map { Comparator comparator();

SortedMap subMap(Object fromKey, Object toKey); SortedMap headMap(Object toKey); SortedMap tailMap(Object fromKey);

Object firstKey(); Object lastKey();}

Page 18: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Implementações

Hashtable x HashMap LinkedList x ArrayList x Vector TreeSet implements SortedSet TreeMap implements SortedMap

               

Implementations

Hash Table Resizable Array Balanced Tree Linked List

Interfaces

Set HashSet   TreeSet  

List   ArrayList, Vector   LinkedList

Map HashMap, Hashtable   TreeMap  

Page 19: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Wrapper implementations Collections decorator//Synchronizationpublic static Collection synchronizedCollection(Collection c);public static Set synchronizedSet(Set s);public static List synchronizedList(List list);public static Map synchronizedMap(Map m);public static SortedSet synchronizedSortedSet(SortedSet s);public static SortedMap synchronizedSortedMap(SortedMap m);//Unmodifiablepublic static Collection unmodifiableCollection(Collection c);public static Set unmodifiableSet(Set s);public static List unmodifiableList(List list);public static Map unmodifiableMap(Map m);public static SortedSet unmodifiableSortedSet(SortedSet s);public static SortedMap unmodifiableSortedMap(SortedMap m);

Page 20: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Convenience Implementations

ArraysasListbinarySearch

CollectionsnCopies (immutable) singleton (immutable)

Page 21: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Algoritmos

Sorting Collections.sort(list) Arrays.sort(array) Optimized merge sort (log n)

Shuffling Collections.shuffle(list)

Routine Data Manipulation Collections.reverse(list) Collections.fill(list,value) Collections.copy(detination,source) Arrays.fill(array,value) System.arrayCopy(dest,destPos,src,srcPos,length)

Page 22: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Algoritmos

Searching Collections.binarySearch(list,value)Arrays.binarySearch(array,value)

Finding Extreme Values Collections.max(list)Collections.min(list)

Page 23: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Customizando Implementações

Possíveis objetivos Persistência, Aplicação específica, Concorrência, Performance,

Funcionalidade, Conveniência, Adaptação AbstractCollection (bag)

iterator, size AbstractSet

iterator, size AbstractList (uses array)

Positional methods AbstractSequencialList (uses linked list)

listIterator, iterator AbstractMap

EntrySet view, put

Page 24: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Resolvendo Problemas Comuns

Refer to:http://java.sun.com/docs/books/tutorial/

collections/problems/index.html

Page 25: Java 2 Collections Framework Leonardo Cole Neto. Roteiro Introdução Interfaces Implementações Algoritmos Customizando Implementações Resolvendo Problemas

Referências

Joshua Bloch, The Java Tutorial, Collections Framework, available at http://java.sun.com/docs/books/tutorial/collections/