Title: Java 2 Collections Framework
1Java 2 Collections Framework
2Roteiro
- Introdução
- Interfaces
- Implementações
- Algoritmos
- Customizando Implementações
- Resolvendo Problemas Comuns
3Introduçã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)
4Collections 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 APIs
- Reduz esforço para aprender uma nova API
- Reduz esforço para criar uma nova API
- Promove reuso
5Interfaces
6Interfaces
- São utilizadas sempre que possível
- Parâmetros de métodos
- Retorno dos métodos
- Permite polimorfismo
- Existem operações opcionais
- UnsupportedOperationException
7Collection
- 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)
8Collection
- public 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)
9Set
- 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)
10List
- 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
11List
- public 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)
12Map
- 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 - hashCode
- equals
13Map
- public 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()
14Ordenaçã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
15Ordenação de Objetos
Class 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
16SortedSet
- Extends Set
- Elementos ordenados de forma ascendente
- Algumas operações a mais para aproveitar a
vantagem da ordenação - public 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()
-
17SortedMap
- 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()
-
18Implementações
Implementations Implementations Implementations Implementations
Hash Table Resizable Array Balanced Tree Linked List
Interfaces Set HashSet TreeSet
Interfaces List ArrayList, Vector LinkedList
Interfaces Map HashMap, Hashtable TreeMap
- Hashtable x HashMap
- LinkedList x ArrayList x Vector
- TreeSet implements SortedSet
- TreeMap implements SortedMap
19Wrapper implementations
- Collections decorator
- //Synchronization
- public static Collection synchronizedCollection(Co
llection c) - public static Set synchronizedSet(Set s)
- public static List synchronizedList(List list)
- public static Map synchronizedMap(Map m)
- public static SortedSet synchronizedSortedSet(Sort
edSet s) - public static SortedMap synchronizedSortedMap(Sort
edMap m) - //Unmodifiable
- public static Collection unmodifiableCollection(Co
llection c) - public static Set unmodifiableSet(Set s)
- public static List unmodifiableList(List list)
- public static Map unmodifiableMap(Map m)
- public static SortedSet unmodifiableSortedSet(Sort
edSet s) - public static SortedMap unmodifiableSortedMap(Sort
edMap m)
20Convenience Implementations
- Arrays
- asList
- binarySearch
- Collections
- nCopies (immutable)
- singleton (immutable)
21Algoritmos
- 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)
22Algoritmos
- Searching
- Collections.binarySearch(list,value)
- Arrays.binarySearch(array,value)
- Finding Extreme Values
- Collections.max(list)
- Collections.min(list)
23Customizando 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
24Resolvendo Problemas Comuns
- Refer to
- http//java.sun.com/docs/books/tutorial/collection
s/problems/index.html
25Referências
- Joshua Bloch, The Java Tutorial, Collections
Framework, available at http//java.sun.com/docs/b
ooks/tutorial/collections/