Colecciones en JAVA INTRODUCCIN A LAS CLASES COLECCIN

  • Slides: 24
Download presentation
Colecciones en JAVA INTRODUCCIÓN A LAS CLASES COLECCIÓN PROPORCIONADAS POR JAVA Y AL MANEJO

Colecciones en JAVA INTRODUCCIÓN A LAS CLASES COLECCIÓN PROPORCIONADAS POR JAVA Y AL MANEJO DE LAS MÁS REPRESENTATIVAS. JOSÉ LUIS REDONDO GARCÍA. GRUPO QUERCUS ENGINEERING SOFTWARE, UEX

Índice 2 Colecciones �Collection clases Array. List, Linked. List, Hash. Set, Tree. Set �interfaz

Índice 2 Colecciones �Collection clases Array. List, Linked. List, Hash. Set, Tree. Set �interfaz Map clases Tree. Map, Hash. Map �Iteratores: interfaz Iterator El lenguaje de programación Java

JCF (Java Collection Framework) 3 �Arquitectura unificada para representar y manipular colecciones �JCF consta

JCF (Java Collection Framework) 3 �Arquitectura unificada para representar y manipular colecciones �JCF consta de: Interfaces (ADTs) Implementaciones concretas (estructuras de datos reusables) Algoritmos (funcionalidad reusable) El lenguaje de programación Java

Colecciones en Java 4 �Permite almacenar y organizar objetos de manera útil para un

Colecciones en Java 4 �Permite almacenar y organizar objetos de manera útil para un acceso eficiente. �Se encuentran en el paquete java. util �Núcleo de abstracciones de colecciones de utilidad (interfaces) e implementaciones ampliamente útiles. �Las interfaces proporcionan métodos para todas las operaciones comunes y las implementaciones concretas especifican la decisión de las operaciones no permitidas. (java. lang. Unsupported. Operation. Exception) �Sobre los elementos se puede iterar (Iterator)

Jerarquía de colecciones 5

Jerarquía de colecciones 5

Jerarquía de colecciones 6

Jerarquía de colecciones 6

Interfaz Collection (1/2) 7 - Collection - int size() boolean empty() boolean contains(Object elem)

Interfaz Collection (1/2) 7 - Collection - int size() boolean empty() boolean contains(Object elem) Iterator iterator() Object[] to. Array(), Object[] to. Array(Object dest[]) boolean add(Object elem), boolean remove(Object elem) void clear() - List – Una colección cuyos elementos permanecen en un orden particular a menos que se modifique la lista. - void add(int index, Object element) Object remove(int index) Object get(int index) Object set(int index, Object element) int index. Of(Object o) int last. Index. Of(Object o) List sub. List(int min, int max)

Interfaz Collection (2/2) 8 -Set – Una colección (conjunto) donde no puede haber elementos

Interfaz Collection (2/2) 8 -Set – Una colección (conjunto) donde no puede haber elementos repetidos, y cuyos elementos no se almacenan necesariamente siguiendo un orden particular. - Mismos métodos que Collection con otro contrato. -Sorted. Set – Conjunto con elementos ordenados. -Object first() -Object last() -Sorted. Set sub. Set(Object from. Element, Object to. Element) -Sorted. Set head. Set(Object to. Element) -Sorted. Set tail. Set(Object from. Element)

Interfaz Map 9 - Map - Un objeto que asocia claves con valores. No

Interfaz Map 9 - Map - Un objeto que asocia claves con valores. No puede tener claves duplicadas. Object put(Object key, Object value); Object remove(Object key); Object get(Object key); contains. Key, contains. Value, is. Empty, size Proporciona tres vistas de colección: colección de claves (key. Set), colección de valores (values), colección de asociaciones clave-valor (entry. Set). - Sorted. Map: Un mapa cuyas claves están ordenadas. - Object first. Key(), Object last. Key(), Sorted. Map sub. Map(Object min. Key, Object max. Key), Sorted. Map head. Map(Object max. Key), Sorted. Map tail. Map(Object min. Key)

Iteración 10 �Collection >> Iterator iterator(); interface Iterator{ boolean has. Next(); /* Devuelve true

Iteración 10 �Collection >> Iterator iterator(); interface Iterator{ boolean has. Next(); /* Devuelve true si la iteración tiene mas elementos */ Object next(); /* Devuelve el siguiente elemento de la iteración Lanza excepción No. Such. Element. Exception */ void remove(); /* Elimina el último elemento devuelto por la iteración Está capacitado para decir que no lo implementa Unsupported. Operation. Exception */ } �La interfaz List. Iterator extiende a Iterator y maneja un objeto List ordenado. Permite iterar hacia delante y hacia atrás.

Iteración 11 • Se puede pensar a Iterator como un cursor ubicado entre los

Iteración 11 • Se puede pensar a Iterator como un cursor ubicado entre los elementos de la colección. Permite iterar sólo hacia delante

Interface Iterator z Se puede pensar a Iterator como un cursor ubicado entre los

Interface Iterator z Se puede pensar a Iterator como un cursor ubicado entre los elementos de la colección Permite iterar sólo hacia delante

Ejemplo de uso de Iteradores 13 �Cálculo del gasto total de un departamento public

Ejemplo de uso de Iteradores 13 �Cálculo del gasto total de un departamento public double gasto. Dpto(){ double gasto=0; Iterator it=plantilla. iterator(); while (it. has. Next()){ gasto+=((Empleado)it. next()). get. Sueldo(); } return gasto; } Siendo plantilla una colección que implemente la interfaz Collection

Implementaciones de Collection 14 -Linked. List – Una implementación de una lista doblemente enlazada.

Implementaciones de Collection 14 -Linked. List – Una implementación de una lista doblemente enlazada. La modificación es poco costosa para cualquier tamaño, pero el acceso aleatorio es lento. Útil para implementar colas y pilas. -get. First, get. Last, remove. First, remove. Last, add. First, add. Last -Array. List – Una lista implementada utilizando un array de dimensión modificable. Es costoso añadir o borrar un elemento cerca del principio de la lista si ésta es grande, pero es relativamente poco costoso de crear y rápido para acceso aleatorio. -Hash. Set – Un Set implementado mediante una tabla hash. Es una buena implementación de propósito general por lo que la búsqueda, la adición y eliminación son insensibles al tamaño de los contenidos. -Tree. Set – Un Sorted. Set implementado utilizando un árbol binario equilibrado. Es más lento para buscar o modificar que un Hash. Set, pero mantiene los elementos ordenados. Asume que los elementos son comparables si no se le ha pasado un comparator en el constructor. -Todas son Cloneable y Serializable

Convenciones sobre excepciones 15 �Unsupported. Operation. Exception Métodos opcionales en la implementación de una

Convenciones sobre excepciones 15 �Unsupported. Operation. Exception Métodos opcionales en la implementación de una interfaz �Class. Cast. Exception El tipo del elemento que se desea insertar no es del tipo apropiado �Illegal. Argument. Exception El valor del elemento no es apropiado para la colección �No. Such. Element. Exception La colección de la que se quiere devolver un elemento está vacía �Null. Pointer. Exception Se pasa como argumento una referencia con valor null cuando la colección no admite este valor.

Declaración de colecciones 16 Clase concreta import java. util. *; public class Coleccion. Simple

Declaración de colecciones 16 Clase concreta import java. util. *; public class Coleccion. Simple { public static void main( String args[] ) { List <String>c = new Array. List <String>(); for( int i=0; i < 10; i++ ) c. add(new Integer(i)); interfaz Iterator it = c. iterator(); while( it. has. Next() ) System. out. println(it. next()); } }

Implementaciones de Map � Hash. Map 17 Una implementación de Map con una tabla

Implementaciones de Map � Hash. Map 17 Una implementación de Map con una tabla hash. - El método hash. Code de cada clave se utiliza para seleccionar un lugar en la tabla - Una colección de utilidad muy general con tiempos relativamente cortos de búsqueda e inserción. - � Tree. Map Una implementación de Sorted. Map utilizando un árbol binario equilibrado que mantiene sus elementos ordenados por clave. Útil para conjuntos de datos ordenados que requieren una búsqueda por clave moderadamente rápida. Asume que los elementos son comparables si no se le ha pasado un comparator en el constructor. El lenguaje de programación Java

Ejemplo 1/2 18 �Generar números al azar (Math. random) y contar cuantas veces sale

Ejemplo 1/2 18 �Generar números al azar (Math. random) y contar cuantas veces sale cada uno. �Hash. Map = Colección de pares (clave-valor) Clave = número aleatorio generado Valor = contador que acumula las veces que ha aparecido class Contador { private int i; public Contador(){ i=1; } public void incrementar(){++i; } public String to. String() { return Integer. to. String(i); } }

Ejemplo 2/2 19 class Estadistico { public static void main( String args[] ) {

Ejemplo 2/2 19 class Estadistico { public static void main( String args[] ) { Hash. Map tabla = new Hash. Map(); for(int i=0; i < 10000; i++) { // Generar un número entre 0 y 20 Integer num = new Integer((int)(Math. random()*20)); if(tabla. contains. Key(num)) //Incrementamos el contador asociado al número ((Contador)tabla. get(num)). incrementar(); else //Añadimos nuevo par: numero-contador tabla. put(num, new Contador()); } System. out. println(tabla); } }

Las utilidades de Collections 20 � public static Object min(Collection col) � public static

Las utilidades de Collections 20 � public static Object min(Collection col) � public static Object max(Collection col) � public static Object min(Collection col, Comparator comp) � public � public clave) � public clave, static Object max(Collection col, Comparator static static void reverse(List lista) void copy(List dst, List fnt) void sort(List lista, Comparator comp) int binary. Search(List lista, Object static int binary. Search(List lista, Object Comparator comp)

Ordenamiento de objetos 21 �Interface Comparable public interface Comparable { public int compare. To(Object

Ordenamiento de objetos 21 �Interface Comparable public interface Comparable { public int compare. To(Object o); } Compara el objeto con el que se invoca el método compare. To � Retorna: � <0 0 >0 si this precede a o si this y o es igual a (equals()) si o precede a this �Un orden natural no siempre es suficiente �Es necesario otro orden distinto al “natural” �Los objetos a ordenar no implementan Comparator

Ordenamiento de objetos Interface Comparator public interface Comparator { public int compare(Object o 1,

Ordenamiento de objetos Interface Comparator public interface Comparator { public int compare(Object o 1, Object o 2); }

Conclusiones 23 �Si un método tiene que devolver (pasar como parámetro) una colección de

Conclusiones 23 �Si un método tiene que devolver (pasar como parámetro) una colección de objetos, el tipo será Iterator o cualquiera de las interfaces de colección. �El tipo de la declaración de los atributos y variables locales será cualquiera de las interfaces de colección. List <String> lista = new Array. List<String>(); �Utilizar SIEMPRE Iterator para el recorrido de cualquier colección.

Elegir una colección depende de. . . � Si es de tamaño fijo o

Elegir una colección depende de. . . � Si es de tamaño fijo o no � Si los elementos tienen un orden natural o no � Si se desea insertar/borrar elementos en cualquier posición o sólo al principio/final � Si será necesario hacer búsquedas en una colección con gran cantidad de datos, en forma rápida, � Si el acceso a los elementos es aleatorio o secuencial