Asesoría SCJP: Sun Certified Java Programmer 6.0
Sun Educational Services
Section 6: Collections & Generics
3
SCJP: Section 6 Section 6: Collections / Generics
Given a design scenario, determine which collection classes and/or interfaces should be used to properly implement that design, including the use of the Comparable interface.
Write code that uses the generic versions of the Collections API, in particular, the Set, List, and Map interfaces and implementation classes. Recognize the limitations of the nongeneric Collections API.
Develop code that makes proper use of type parameters in class/interface declarations, instance variables, method arguments, and return types; and write generic methods or methods that make use of wildcard types and understand the similarities and differences between these two approaches.
4
SCJP: Section 6 Section 6: Collections / Generics (Continuación)
Distinguish between correct and incorrect overrides of corresponding hashCode and equals methods, and explain the difference between == and the equals method.
Use capabilities in the java.util package to write code to manipulate a list by sorting, performing a binary search, or converting the list to an array. Use capabilities in the java.util package to write code to manipulate an array by sorting, performing a binary search, or converting the array to a list. Use the java.util.Comparator and java.lang.Comparable interfaces to affect the sorting of lists and arrays. Furthermore, recognize the effect of the "natural ordering" of primitive wrapper classes and java.lang.String on sorting.
5
Definición de una Java CollectionUna colección es una estructura de datos dinámica
En Java todas las colecciones son un conjunto de Objetos de tipo Clase Object
Pueden incrementar o decrementar dinámicamente su tamaño en tiempo de ejecución
Existen 3 tipos de Interfaces en el framework de Colecciones en Java
Tipo List
Tipo Set
Tipo Map
6
Implementaciones de Colecciones
7
Jerarquía de Colecciones Java
8
Conceptos BásicosSe dice que una colección es ordenada, cuando se respeta el orden de inserción del los elementos, es decir: “tal cual se insertan tal cual se extraen”
Una colección es sorted ( clasificada ) cuando sus elementos están clasificados de acuerdo algún tipo de comparación
Alfabéticamente
De mayor valor a menor
Por prioridades, etc...
9
Colecciones tipo ListLa interface java.util.List define una colección de objetos ordenados
En las implementaciones de List se permiten elementos duplicados
Las implementaciones disponibles de List son:
ArrayList
Vector
LinkedList
10
Implementaciones tipo Listjava.util.ArrayList
Lista ordenada que acepta elementos duplicados
Los elementos se agregan al final de la colección
No Thread Safe
java.util.LinkedList
Lista ordenada que acepta elementos duplicados
Pueden insertarse elementos al principio o al final de la colección
addFirst(Object obj);addLast(Object obj);
No Thread Safe
11
Implementaciones tipo ListContinuación implementaciones tipo List
java.util.Vector
Similar a ArrayList pero sus métodos de acceso son synchronized, es decir es ThreadSafe
Debido a que es ThreadSafe se considera como una colección de peso, por lo que solo se recomienda su uso en aplicaciones multi thread.
Si se utilizara en aplicaciones mono thread, puede ocasionar un overhead innecesario
12
Colecciones tipo SetLa interface java.util.Set define conjuntos de objetos NO ordenados y NO permiten elementos duplicados (Objetos con los mismo contenidos)
Utiliza algoritmos de hashing para posicionar los elementos
En clases de usuario, es necesario sobre escribir el método hashCode de Object, para especificar el algoritmo de hashing que evite objetos duplicados en la colección Set.
13
Implementaciones tipo Setjava.util.HashSet
Utiliza algoritmos de hashCode para posicionar los elementos
No permite duplicados (colapso de hash values)
No es Ordenada (es regido por el algoritmo de Hash)
Con respecto a las colecciones tipo List, las Set son más rápidas en lecturas, pero un tanto más lentas en escritura
No ThreadSafe
14
Implementaciones tipo Setjava.util.LinkedHashSet
Colección de Objetos Ordenados
No permite elementos duplicados
No ThreadSafe
java.util.TreeSet
Permite insertar elementos clasificados (sorted) de acuerdo al orden natural definido por la interface Comparable
No acepta NULL
No ThreadSafe
15
Colecciones tipo MapImplementan estructuras de pares ordenados:
ID key
Value
Definidas por la interface java.util.Map
Se consideran muy útiles como mapas de correspondencia
A diferencia de las listas List, y los conjuntos Set, los Map, no implementan la interface Java Collection, pero si se consideran parte del Collections FrameWork
Siempre reciben un par de Objetos: el ID Key, y su valor value asociado
16
Implementaciones tipo Mapjava.util.HashMap
Mapa de valores ID Key / Value
No ThreadSafe
java.util.Hashtable
Similar a HashMap, solo que No permite valores nulos en Key/Value
Thread Safe
java.util.LinkedHashMap
Inserción ordenada
java.util.TreeMap
Mapa clasificado (sorted)
17
Resumen de Colecciones
18
La clase Object
19
La clase ObjectPuntos a considerar:
Metodos que si pueden ser sobreescritos:
equals/hashCode
finalize
toString
Métodos que no pueden ser sobreescritos:
notify
notyAll
wait
20
GenéricosCaracterística agregada a la versión Java 1.5
Permite Definir una colección de objetos de algún tipo particular
Ahora las colecciones se consideran TypeSafe
Con los genéricos solamente se pueden insertar objetos de tipo genérico o de su familia
Si el programado intenta insertar algún objeto de tipo distinto al genérico, ahora el compilador lo valida
Evita las Excepciones de tipo:
java.lang.CastException
21
Ejemplo Código de GenéricosCódigo Java 1.5 con Genericos
public class TestGenerics{
public static void main(String args[]){ List<String> list = new ArrayList<String>(); list.add("Sun"); list.add("Certified"); list.add("Java"); list.add("Programmer"); //list.add(new Thread()); // Error Compilacion, Genericos !!! for(String s: list){ System.out.println(s); } } }
22
Inteface CollectionsContiene un conjunto de métodos static.
Los cuales trabajan o retornan colecciones.
Ejemplos:
Collections.sort().
Ordena la colección de acuerdo al orden natural de la misma.
Si no existe un orden natural, se debe implementar la interfaz
Comparable. Método a implementar:
public int compareTo(T o){}
Collections.binarySearch(List l, T o).
Realiza una búsqueda con algoritmo binario. Deberá estar implementada la interfaz comparable.
23
Interface Comparable
Impone un orden en los objetos de las clases que la implementen.
Implementación del método: compareTo(Object o)
Método de comparación para designar el orden de los elementos de la Lista o Arreglo.
Invocación:
Collections.sort(List);
Arrays.sort(Array);
Útil para colecciones de tipo List, Set (No Sorted)
24
Interface Comparator
Función de comparación que impone un orden en una colección.
Alternativa de interface Comparable.
Método a implementar:
public int compare(T o1, T o2)
Util para colecciones de tipo List, Set (No Sorted)
25
Interface Comparable & ComparatorNo aplicables para colecciones No Sorted de tipo Map. Apegadas al método hashCode().
Colecciones: TreeSet & TreeMap
Intentaran utilizar el método compareTo() de la inteface Comparable o bien la implementación del mismo.
Intentaran utilizar el método compare() de la interface Comparator o bien la implementación del mismo.
26
Fin de Sección 6: Collections & Generics
• Notas
27
Carácter WildcardUtilizado como un carácter para indicar tipos de Colecciones Genéricas.
Aplicable solo en declaraciones, nunca en Constructores.
Tipos de Wildcards:
"? extends TypeA":Cualquier Subtipo o igual a TypeA
"? super TypeA" :Cualquier Superipo o igual a TypeA
"?" :Cualquier Tipo