• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Colecciones
 

Colecciones

on

  • 16,573 views

 

Statistics

Views

Total Views
16,573
Views on SlideShare
16,502
Embed Views
71

Actions

Likes
4
Downloads
235
Comments
0

3 Embeds 71

http://www.slideshare.net 69
http://webcache.googleusercontent.com 1
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Objetivos Conocer el framework de colecciones de Java. Identificar e implementar clases genéricas. Conocer el mecanismo de Autoboxing/Unboxing del jdk1.5 de Java.
  • Genéricos Un genérico es una forma de marcar que un determinado objeto será de una clase determinada o que vendrá definido por una plantilla. Es una forma de hacer más seguros nuestros programas al hacer un tipado más fuerte en tiempo de compilación. Permite eliminar algunos castings. Nos permite crear un fuerte tipado durante el tiempo de ejecución. Se asegura que si el compilador no genera ningún warning, el código es type-safe. El código compilado (el .class) permanece transparente a esta característica. Proporciona más seguridad, pues si antes un código daba errores en tiempo de ejecución, ahora los da en tiempo de compilación: tipado mas fuerte. Permite ahorrarnos los castings.
  • Autoboxing/Unboxing Convertir tipos primitivos en tipos warpper Tiger convierte los tipos primitivos a su tipo wrapper correspondiente bajo demanda, esto quiere decir que no hay por que complicarse con casting de unos a otros Convertir tipos warpper en tipos primitivos Tiger convierte un tipo wrapper a su primitivos correspondiente bajo demando, esto quiere decir que no hay por que complicarse con casting de unos a otros Incrementar decrementar tipos warpper Con el nuevo sistema de autoboxing/unboxing podemos incrementar o decrementar con los operadores ++ y -- a esto se le llama autounboxing
  • Framework de Colecciones La estructura de colecciones de Java es un conjunto de interfaces y clases que mejoran notablemente las capacidades del lenguaje respecto a las estructuras de datos. Sus elementos son: Interfaces : Tipos abstractos de datos que representan las colecciones. Permiten manipularlas con independencia de los detalles de su implementación. Implementaciones : Implementaciones concretas de las interfaces anteriores. Algoritmos : Métodos que realizan de forma eficiente tareas habituales, como búsquedas y ordenaciones, sobre objetos que implementan las interfaces de la estructura de colecciones. ¿Cuándo usar colecciones? Cuando se necesitan características más sofisticadas para almacenar objetos, que las que proporciona un simple array. Cuando se necesita redimensionar automáticamente la capacidad de una estructura de datos, por lo que se puede colocar en las colecciones cualquier número de objetos, sin necesidad de tener que ir controlando continuamente en el programa la longitud de la colección.
  • Colecciones en Java. Interfaces Collection: Colección de objetos en la que se requiere la máxima generalidad. Set (conjunto): Colección sin elementos repetidos. La colección puede estar o no ordenada. Implementaciones: HashSet y LinkedHashSet. SortedSet: Conjunto en el que los elementos se almacenan en orden ascendente, siguiendo el orden natural o aquél establecido por un objeto Comparator . Implementaciones: TreeSet. List (lista): Colección en la que el orden de los elementos es relevante. La colección puede tener elementos repetidos. Implementaciones: ArrayList, LinkedList y Vector. Queue (cola): Colección en la que el orden de los elementos es relevante y se administra como una cola (first in first out). La colección puede tener elementos repetidos. Implementaciones: PriorityQueue, LinkedList. BlockingQueue: Colección utilizada para el framework de concurrencia de Java. Implementaciones : ArrayBlockingQueue, LinkedBlockingQueue, PriorityBlockingQueue. Map (mapa): Estructura de datos agrupados en parejas de la forma clave/valor, lo que permite localizar un valor en función de una clave dada. Implementaciones: HashMap, Hashtable, WeakHashMap, Properties, EnumMap, LinkedHashMap. SortedMap: Mapa en el que los elementos se almacenan en orden ascendente, siguiendo el orden natural o aquél establecido por un objeto Comparator . Implementaciones: TreeMap.
  • Framework de Colecciones de Java Interfaces Interfaces Principales (core)
  • Colecciones en Java. Interface Collection Especificaciones de la interface Collection size, retorna el número de elementos de la colección. isEmpty, indica si la colección esta vacía. contains, retorna true si el objeto es miembro de la colección. iterator , retorna un objeto de tipo Iterator para recorrer la colección. toArray , retorna un array con los elementos de la colección. add , permite añadir un nuevo elemento a la colección. remove , permite quitar un elemento de la colección. containsAll , permite buscar los elementos de una colección dentro de la colección actual. addAll , permite añadir todos los elementos de una colección dentro de la colección actual. removeAll , permite quitar todos los elementos de una colección dentro de la colección actual. retainAll , permite mantener sólo los elementos coincidentes dentro de la colección, al igual que una intersección en la teoría de conjuntos. clear , elimina todos los elementos de la colección.
  • Colecciones en Java. Adaptador AbstractCollection Adaptador Clase que acomoda la interface de una clase a la interface que espera un cliente AbstractCollection Implementa de forma eficiente acciones comunes de las colecciones. Permite la rápida implementación objetos que sigan las especificaciones de la interface Collection. Clases útiles Existen dos clases que proporcionan un conjunto de métodos auxiliares estáticos: java.utils.Arrays y java.utils.Collections, dentro de las utilidades se encuentran: Ordenamiento Comparación Copia Extracción Modificación Búsqueda Sincronización y Creación de colecciones de sólo lectura
  • Colecciones en Java. Implementación de Listas List Establece estipulaciones adicionales a las del interfaz Collection en los métodos add, equals, hashCode, iterator y remove. También añade nuevos métodos a los allí declarados para un acceso posicional, la obtención de un nuevo tipo de iterator y la obtención de una “vista” representando una porción de la lista. Los elementos en una lista conservan una secuencia, esta es el orden de introducción. Esta secuencia es la utilizada por los dos tipos de iterator a la hora de devolver los elementos en la lista. Una lista permite elementos determinados equivalentes por equals, y la existencia de varios elementos nulos. Aunque también podría crease una versión especial que no lo hiciera. Una lista podría contenerse a si misma, pero dado que equals y hashCode ya no están bien definidos en ella, debería emplearse con máxima precaución. Nota sobre ordered y sorted: no son lo mismo, las listas tienen una secuencia independiente del valor de sus elementos; mientras un TreeSet esta sorted pues sus elementos están dispuestos dependiendo de su valor relativo (ordenados).
  • Interface List public interface List extends Collection { E get( int index) ; E set( int index, E element) ; void add( int index, E element) ; E remove( int index) ; int indexOf(Object o) ; int lastIndexOf(Object o) ; ListIterator listIterator() ; ListIterator listIterator( int index) ; List subList( int fromIndex, int toIndex) ; } Especificaciones de la interface List get ,permite obtener un elemento dado un índice. set , permite cambiar el valor del elemento dado un índice. add , inserta un nuevo elemento en el índice específico. remove , permite quitar un elemento de la colección dado un índice. indexOf , retorna el índice de la primera aparición del elemento buscado si existe, sino retorna -1. lastIndexOf , retorna el índice de la última aparición del elemento buscado si existe, sino retorna -1. listIterador , retorna un Objeto ListIterator capaz de desplazarse por los elementos de la colección, se puede definir un el retorno de los elementos a partir de un índice inicial. subList , obtiene los elementos contenidos dentro de un rango de índices. Interfaz ListIterator Este tipo especial de Iterator (deriva de él) puede obtenerse de un List, no de un Set. También es fallo- rápido. Añade métodos para iterar hacia atrás, para insertar o remplazar durante la iteración y para obtener la posición del puntero interno. Entre cada par de elementos, y también antes del primero y después del último existe una posible posición del puntero: (0) ele0 (1) ele1 (2) ele2 (3) ele3 (4) El primer elemento tiene un indice cero, mientras que el último indice no corresponde a ningún elemento. La primera posición posible del puntero es cero y la última el tamaño de la lista. El método ListIterator() de una lista devuelve un ListIterator cuyo puntero es cero. El método ListIterator( int ) posiciona el puntero en el indice int.
  • Colecciones en Java. Vector Una secuencia que permite el acceso a sus elementos mediante sus índices se denomina vector. Es una implementación heredada desde JDK 1.1. En JDK 1.2 fue adaptada para que implementase List. De hecho deriva de AbstracList. No se recomienda su uso. No es mas rápida que las implementaciones ArrayList o LinkedList, sin embargo a diferencia de ellas si esta sincronizada. Sus iterators también son fallo-rápido. Es un arreglo ampliable de referencia a objeto. Internamente, un vector implementa una estrategia de crecimiento para minimizar la reasignación y el espacio desperdiciado. Para recuperar y desplazarse hacia delante de la lista se puede utilizarse un Enumeration, pero no para eliminar ni insertar un elemento.
  • Colecciones en Java. Stack Deriva de Vector e implementa List, Cloneable y Serializable. También es una implementación heredada de JDK 1.1. En JDK 1.2 añade unos métodos a Vector que permiten tratarlo como una pila: boolean empty() Object push( Object ) int search( Object ) Object pop() Object peek()
  • Colecciones en Java. ArrayList Conserva una secuencia entre sus elementos, pero no un orden a menos que se utilice Collections.sort. Deriva de la clase AbstractList e implementa List, Clonable y Serializable. Mantiene sus elementos en una matriz. Los métodos size, get, isEmpty, iterator y listIterator se ejecutan en un tiempo constante menor el correspondiente a LinkedList. El método add se ejecuta en un tiempo constante amortizado, es decir, añadir n elementos conlleva un tiempo n multiplicado por el factor constante. Los métodos restantes se ejecutan en un tiempo lineal. Sus iterators son fallo-rapido. Permite duplicados y nulos. No esta sincronizado. Para procurar un acceso seguro por parte de varios hilos de ejecución puede sincronizarse sobre el objeto que la contenga o utilizar Collections.synchronizedList. Dado que la operación de incremento de la capacidad de la matriz que contiene los elementos lleva su tiempo, ante la perspectiva de la inclusión de muchos elementos nuevos es conveniente invocar al método ensureCapacity para evitar ampliaciones sucesivas. El acceso directo es eficiente, no así el secuencial. Mientras la adición o eliminación al comienzo o final es realizada en un tiempo aceptable, la implementación LinkedList la supera ampliamente cuando estas operaciones se realizan en posiciones interiores. Por lo general, es la implementación que por defecto deberíamos escoger, y optar por LinkedList únicamente si deseamos añadir o eliminar con frecuencia en posiciones interiores.
  • Colecciones en Java. LinkedList Conserva una secuencia entre sus elementos, pero no un orden a menos que se utilice Collections.sort. Deriva de la clase AbstractSequentialList, la cual a su vez extiende de AbstractList. Implementa List, Cloneable y Serializable. Su estructura de datos es un lista enlazada. Las operaciones de acceso posicional empiezan a recorrer la lista desde el extremo mas próximo al indice. El recorrido secuencial y la inserción-extracción de posiciones intermedias son mas rápidas que en la implementación ArrayList. Esta dotada de una serie de operaciones adicionales a las declaradas en el interfaz List. Estas operaciones (que también podrían ser realizados mediante métodos definidos en List) permiten utilizarla como un pila, cola y cola doblemente terminada (dequeue): getFirst(), getLast(), removeFirst(), removeLast(), addFirst() y addLast(). Los cuatro primeros lanzan NoSuchElementException si la lista esta vacía.
  • Colecciones en Java. Implementación de Conjuntos Set Estipula la no existencia de duplicados. El elemento nulo tampoco puede ser contenido mas de una vez. Extiende de Collection y no añade ningún método a los allí definidos. Sin embargo, si modifica el contrato impuesto por los métodos add, equals y hashCode. Además, las clases que implementen este interfaz deben imponer a sus constructores la imposibilidad de añadir elementos duplicados. El método equals de los elementos será invocado para averiguar si el objeto a añadir ya existe. Debe extremarse la precaución de no modificar el estado de un elemento del Set mientras permanece en él, al menos no los campos utilizados por equals; ya que esto provocaría inconsistencia entre sucesivas llamadas al método. En esta situación el comportamiento del Set no esta definido. Un Set no puede contenerse a si mismo. Debido a la forma en que hashCode es implementado ello provocaría un bucle infinito. Interfaz SortedSet Deriva del interfaz Set. Garantiza que el Iterator obtenido de la clase que lo implemente recorrerá en sentido ascendente los elementos.
  • Colecciones en Java. TreeSet Deriva de AbstractSet e implementa SortedSet, Cloneable y Serializable. No permite duplicados pero si un único elemento nulo. Es respaldado por un TreeMap. Asegura un tiempo de ejecución log(n) para las operaciones básicas: add, remove, y size. Mantiene un orden ascendente si los elementos cuentan con ordenación natural. O bien mantiene el orden impuesto por un Comparator. Este orden ha de ser consistente con equals. Si no lo fuera, el TreeSet sigue siendo totalmente funcional pero ya no implementaría correctamente el interfaz Set. El interfaz Set esta definido en base a equals, pero un objeto TreeSet realiza todos los accesos aplicando compareTo o compare al elemento a acceder o añadir. Ambos métodos deben lanzar ClassCastException si el elemento que se pretende agregar al Set no es del tipo adecuado. El iterator de esta implementación es fallo-rápido. Esta implementación no esta sincronizada. Si se requiere, puede sincronizarse sobre el objeto que contiene al TreeSet, o bien usando Collections.synchronizedSet.
  • Colecciones en Java. HashSet Deriva de AbstractSet e implementa Set, Serializable y Cloneable. No permite duplicados pero si un único elemento nulo. Su estructura de datos es un HashMap. Cuando un elemento nuevo pretende ser añadido se utiliza su valor hash para indexar en la estructura. Además el método equals del elemento es utilizado para determinar si el elemento nuevo es equivalente a los contenidos en el cubo “bucket” obtenido en el paso anterior. Ofrece un funcionamiento en un tiempo constante para las operaciones básicas: add, remove, size y contains. Siempre y cuando la función hash disperse los elementos adecuadamente entre los cubos. La iteración a través del HashSet es proporcional a la suma de su tamaño y su capacidad. Por lo tanto, si el tiempo de iteración es importante, no debe crearse el objeto con una capacidad elevada o un factor de carga pequeño. Esta implementación no esta sincronizada por defecto, sino que suele utilizarse el objeto que la contiene, o bien Collecctions.synchronizedSet. Su iterator es fallo-rápido.
  • Colecciones en Java. LinkedHashSet Deriva de HashSet, además implementa las interfaces Set, Clonable y Serializable. Su estructura es la de una lista doblemente enlazada a diferencia de un HashSet. Contiene dos parámetros que afectan su funcionamiento: capacidad inicial y factor de carga. Son definidos como a un HashSet, sin embargo la penalidad al escoger un valor de exceso inicial es menor comparada a un HashSet. El funcionamiento probablemente es ligeramente debajo de él de HashSet, debido al costo añadido de mantener la lista enlazada, con una excepción: La iteración sobre un LinkedHashSet requiere el tiempo proporcional al tamaño del Set, independientemente de su capacidad. La iteración sobre un HashSet probablemente es más cara, requiriendo el tiempo proporcional a su capacidad. Esta implementación no esta sincronizada por defecto, sino que suele utilizarse el objeto que la contiene, o bien Collecctions.synchronizedSet. Su iterator es fallo-rápido.
  • Colecciones en Java. Implementación de Mapas Map No deriva de Collection. Representa asociaciones entre parejas clave-valor. Las claves son únicas en el Map, los valores no tienen porque serlo. Una clave es asociada únicamente a un valor. Puede obtenerse una colección del tipo Set conteniendo las claves del Map, otra de las parejas clave-valor, y otra del tipo Collection (implementada por una List) de los valores. El orden del Map es aquel establecido por estas colecciones. La implementación HashMap no garantiza ningún orden, mientras que TreeMap si lo hace. Un Map no puede contenerse a sí mismo como clave, aunque podría hacerlo como valor, pero no es recomendable, puesto que equals y hashCode no serían correctamente implementados. La operación del Map resulta impredecible si el estado de un objeto utilizado como clave es modificado, de forma que afecte a las comparaciones realizadas mediante equals, mientras se encuentra en el Map. Interfaz SortedMap Deriva de Map. La claseTreeMap lo implementa. Asegura un orden en sus parejas clave-valor establecido “naturalmente” por las claves o mediante un Comparator.
  • Interface Map public interface Map { int size() ; boolean isEmpty() ; boolean containsKey(Object key) ; boolean containsValue(Object value) ; V get(Object key) ; V put(K key, V value) ; V remove(Object key) ; void putAll(Map t) ; void clear() ; Set keySet() ; Collection values() ; Set> entrySet() ; interface Entry { K getKey() ; V getValue() ; V setValue(V value) ; } }
  • Colecciones en Java. HashMap Deriva de AbstractMap e implementa Map, Serializable y Cloneable. Asocia un objeto clave a otro objeto denominado valor. No permite duplicados en la clave pero si en el valor. Tanto uno como el otro pueden ser nulos. Es una implementación basada en un tabla hash. Cuando una pareja calve-valor nueva pretende ser añadida se utiliza el valor hash de la clave para indexar en la tabla hash. Además el método equals de la clave es utilizado para determinar si el elemento nuevo es equivalente a los contenidos en el cubo “bucket” obtenido en el paso anterior. No se mantiene ningún orden entre las parejas contenidas. Ofrece un funcionamiento en un tiempo constante para las operaciones básicas: put y get. Siempre y cuando la función hash disperse las parejas adecuadamente entre los cubos. La iteración a través del HashMap es proporcional a la suma de su tamaño y su capacidad. Por lo tanto, si el tiempo de iteración es importante, no debe crearse el objeto con una capacidad elevada o un factor de carga pequeño. Si se esperan muchas adiciones a un HashMap crearlo con una capacidad adecuada evitará incrementos sucesivos en su capacidad. Esta implementación no esta sincronizada por defecto, sino que suele utilizarse el objeto que la contiene, o bien Collecctions.synchronizedMap. Todos los iterators obtenidos de las vistas del HashMap son fallo-rápido.
  • Colecciones en Java. LinkedHashMap Conserva una secuencia entre sus elementos, pero no un orden a menos que se utilice Collections.sort. Deriva de la clase HashMap. Implementa Map. Su estructura de datos es un lista doblemente enlazada. Las operaciones de acceso posicional empiezan a recorrer la colección desde el extremo mas próximo al índice.
  • Colecciones en Java. IdentityHashMap Esta clase implementa la interfaz Map con una tabla hash, usando la igualdad de referencia en el lugar de igualdad de objeto comparando llaves (y valores). En otras palabras, en un IdentityHashMap, dos llaves k1 y k2 son consideradas iguales si y sólo si (k1 == k2). ¿(En puestas en práctica de Map normales (como HashMap) dos llaves k1 y k2 son consideradas iguales si y sólo si ( k1 == null ? K2 = = null : K1.equals (k2) ). Esta clase no es una implementación de Map de uso general. Mientras esta clase implementa la interfaz de Map, esto intencionadamente viola el contrato general del Map, que confiere por mandato el empleo del método de igualdad comparando objetos. Esta clase es diseñada para el empleo sólo en los casos raros en el que requieren la semántica de igualdad de referencia. Esta clase proporciona todas las operaciones de map opcionales, y permite a valores nulos y la llave nula.
  • Colecciones en Java. WeakHashMap Mantiene sus claves a través de WeakObjects. Sus valores son apuntados por referencias normales. Cuando el recolector de basuras encuentra objetos claves referidos únicamente por referencias débiles, es decir cuando las claves ya no son apuntadas por otras variables desde fuera del map, el recolector borra dichas referencias y los objetos clave pueden ser reciclados. La próxima vez se acceda al map este eliminará las entradas correspondientes a dichas claves. Por lo tanto este map se comporta como si un hilo estuviera eliminando parejas clave-valor. Por este motivo sucesivas llamadas a sus métodos podrían retornar valores inconsistentes. Esta implementación esta dirigida principalmente al uso con claves cuyo equals esta basado en ==, en vez de comparaciones sobre el estado de los objetos. Los objetos que implementan equals con comparaciones del estado de los objetos son objetos recreables. Aquellos en los que equals se basa en == no lo son. Si utilizamos objetos no recreables como claves no sería posible sorprenderse si al realizar una búsqueda de un objeto que ya fue desechado ya no lo encontrásemos en el map; el contenedor lo habría eliminado y al volver a crearlo no podríamos esperar que equals determinase equivalencia con ningún otro objeto. Por lo demás WeakHashMap es equivalente a HashMap.
  • Colecciones en Java. TreeMap Deriva de AbstractMap e implementa SortedMap, Cloneable y Serializable. Al ser un Map también asocia parejas clave-valor. Es respaldado por un árbol Rojo-Negro. Asegura un tiempo de ejecución log(n) para las operaciones : put, get, remove y containsKey. Mantiene un orden ascendente si las claves cuentan con ordenación natural. O bien mantiene el orden impuesto por un Comparator. Este orden ha de ser consistente con equals. Si no lo fuera, el TreeMap sigue siendo totalmente funcional pero ya no implementaría correctamente el interfaz Map. El interfaz Map esta definido en base a equals, pero un objeto TreeMap realiza todos los accesos aplicando compareTo o compare a la clave a acceder o añadir. Ambos métodos deben lanzar ClassCastException si la clave que se pretende agregar al Set no es del tipo adecuado. Los Iterators que se obtienen de las vistas de esta implementación son todos fallo-rápido. Esta implementación no esta sincronizada. Si se requiere, puede sincronizarse sobre el objeto que contiene al Treemap, o bien usando Collections.synchronizedMap.
  • Colecciones en Java. EnumMap Es una implementación de la interfaz Map que utiliza tipos Enum para el valor de las claves. Todas las llaves del Map son los valores de un solo Enum que es especificado al momento de su creación. El Map es representado como series, esta representación es sumamente compacta y eficiente. Las llaves nulas no están permitidas. Como la mayor parte de implementaciones de colección EnumMap no es sincronizado. Si múltiples hilos tienen acceso a un mapa de enum simultáneamente, y al menos uno de los hilos modifica el mapa, debería ser sincronizado por fuera.
  • Colecciones en Java. Hashtable Deriva de java.util.Dictionary e implementa Map, Cloneable y Serializable. Dictionary es una clase abstracta y obsoleta. De hecho HashTable es otra implementación heredada desde JDK 1.1 que se mantiene por criterios de compatibilidad. HashMap o TreeeMap deberían de ser elegidos preferentemente. No permite claves o valores nulos. Los iterators obtenidos de sus vistas son fallo-rapido. Como el resto de las implementaciones heredadas esta sincronizado.
  • Colecciones en Java. Properties Properties extiende a Hashtable. Mapa cuyos elementos están ordenados por el valores y no por claves. Define métodos para la lectura y escritura de archivos de extensión properties. Permite la lectura y escritura en XML.
  • Colecciones en Java. Implementación de Colas La interface Queue public interface Queue extends Collection { boolean offer(E o) ; E poll() ; // recupera y quita la cabeza de la cola inclusive si no hay elementos E remove() ; // recuepra y quita la cabeza de la cola y causa una excepción si ya no // hay elementos E peek() ; // recupara pero no quita la cabeza de la cola, retorna null si la cola está // vacía E element() ; // recupara pero no quita la cabeza de la cola, genera una excepción si // la cola está vacía }
  • Colecciones en Java. PriorityQueue Implementación de propósito general de una cola, extiende a AbstractQueue e implementa java.io.Serializable.
  • Práctica 10: Uso de colecciones Objetivos Identificar las clases que comprenden el framework de colecciones de Java para la resolución de problemas en los que intervengan Listas, Conjuntos, Mapas y Colas. Hacer uso de Clases parametrizadas. Ejercicios Dado un ArrayList de números reales: Escriba un método max que nos devuelva el máximo de los valores incluidos en el ArrayList. Escriba un método min que nos devuelva el mínimo de los valores incluidos en el ArrayList. Escriba un método media que nos devuelva la media de los valores incluidos en el ArrayList. Escriba un método moda que nos devuelva la moda de los valores incluidos en el ArrayList. Implemente una clase en Java, llamada Serie, que encapsule un ArrayList de números reales e incluya métodos (no estáticos) que nos permitan calcular todos los valores mencionados en el ejercicio anterior a partir de los datos encapsulados por un objeto de tipo Serie. Lea una expresión postfija y calcule su valor numérico. Indique el movimiento a realizar en las Torres de Hanoi. Cada 3 minutos llega un equipo para ser reparado, el experto toma exactamente 4 minutos en revisarlo. Determine el número promedio de equipos en espera de ser inspeccionados, durante la primera hora. Ordene los elementos de una lista enlazada según los siguientes métodos: a) selección, b) inserción Se desea ofrecer el servicio de diccionario de términos de Ingeniería. ¿Qué clase del framework de colecciones de Java utilizaría para su implementación? Tomando como referencia el Módulo 6, que clase del framework de colecciones de Java utilizaría para representar los items de un pedido de la empresa XYZ.

Colecciones Colecciones Presentation Transcript

  • Colecciones Ing. Rolando Steep Quezada Martínez [email_address] Programación Básica en Java y Programación Orientada a Objetos
  • Genéricos
  • Autoboxing/Unboxing
    • Convertir tipos primitivos en tipos warpper.
    • Convertir tipos warpper en tipos primitivos.
    • Incrementar decrementar tipos warpper.
    //Antes Integer unentero = new Integer( 5 ) ; // el valor de unentero es inmutable //JDK 1.5 Integer unentero = 5 ; unentero++ ; System.out.println( unentero ) ;
  • ¿Framework para colecciones?
    • Framework de colecciones
      • arquitectura unificada para representar y manipular colecciones
      • independiente de los detalles de representación
    • Colección: agrupación de objetos
    • Dos grandes tipos de colecciones:
      • acceso por posición (listas, conjuntos, …)
      • acceso por clave (diccionarios, …)
  • Colecciones en Java. Interfaces
    • Collection
      • Set
        • SortedSet
      • List
      • Queue
        • BlockingQueue
    • Map
      • SortedMap
    • Iterable
    • Iterator
      • ListIterator
    • Enumeration
    • Comparable
    • Comparator
  •  
  • Colecciones en Java. Interface Collection
    • public interface Collection<E> extends Iterable<E> {
    • int size() ;
    • boolean isEmpty() ;
    • boolean contains(Object o) ;
    • Iterator<E> iterator() ;
    • boolean add(E o) ;
    • boolean remove(Object o) ;
    • boolean containsAll(Collection<?> c) ;
    • boolean addAll(Collection<? extends E> c) ;
    • boolean removeAll(Collection<?> c) ;
    • boolean retainAll(Collection<?> c) ;
    • void clear() ;
    • Object[] toArray() ;
    • <T> T[] toArray(T[] a) ;
    • }
  • Colecciones en Java. Adaptador AbstractCollection
    • Proporciona una implementación básica para la interface Collection para reducir al máximo la implementación de ésta.
    • Métodos a implementar por los hijos
    • public abstract Iterator<E> iterator();
    • public abstract int size();
    • Método a redefinir por los hijos
    • public boolean add(E o) {
    • throw new UnsupportedOperationException();
    • }
  • Colecciones en Java. Implementación de listas
  •  
  • Colecciones en Java. Vector
    • El Vector es muy simple y fácil de utilizar. Aunque los métodos más habituales en su manipulación son add() para insertar elementos en el Vector , elementAt() para recuperarlos y elements() para obtener una Enumeration con el número de elementos del Vector
      • Vector mivector = new Vector() ;
      • for ( int i=0 ; i < 10 ; i++ )
      • mivector.add( i ) ;
      • Enumeration lista = mivector.elements() ;
      • While ( lista.hasMoreElements() )
      • System.out.println( lista.nextElement() ) ;
      • System.out.println( mivector ) ;
  • Colecciones en Java. Stack
    • Un Stack es una Pila , o una colección de tipo LIFO ( last-in , first-out ). Es decir, lo último que se coloque en la pila será lo primero que se saque. Los diseñadores de Java, en vez de utilizar un Vector como bloque para crear un Stack , han hecho que Stack derive directamente de Vector , así que tiene todas las características de un Vector más alguna otra propia del Stack; Así que todas las operaciones que se realicen sobre un Vector también se podrán realizar sobre un Stack.
    Stack pila = new Stack() ; for ( int i=0 ; i < 10 ; i++ ) pila.push( i ) ; Enumeration lista = pila.elements() ; for( int i=0 ; i < 10 ; i++ ) System.out.println( pila.pop() ) ;
  • Colecciones en Java. ArrayList
    • Es una Lista volcada en un Array. Se debe utilizar en lugar de Vector como almacenamiento de objetos de propósito general. Permite un acceso aleatorio muy rápido a los elementos, pero realiza con bastante lentitud las operaciones de insertado y borrado de elementos en medio de la Lista. Se puede utilizar un ListIterator para moverse hacia atrás y hacia delante en la Lista, pero no para insertar y eliminar elementos.
      • ArrayList miarray = new ArrayList() ;
      • for ( int i=0 ; i < 10 ; i++ )
      • miarray.add( i ) ;
      • Iterator it = miarray.iterator() ;
      • While ( it.hasNext() )
      • System.out.println( it.next() ) ;
  • Colecciones en Java. LinkedList
    • Proporciona un óptimo acceso secuencial, permitiendo inserciones y borrado de elementos de en medio de la Lista muy rápidas. Sin embargo es bastante lento el acceso aleatorio, en comparación con la ArrayList .
      • LinkedList milista = new LinkedList() ;
      • for ( int i=0 ; i < 10 ; i++ )
      • milista.add( i ) ;
      • Iterator it = milista.iterator() ;
      • While ( it.hasNext() )
      • System.out.println( it.next() ) ;
  • Colecciones en Java. Implementación de conjuntos
  • Colecciones en Java. TreeSet
    • Es un Set ordenado, almacenado en un árbol balanceado. En este caso es muy fácil extraer una secuencia ordenada a partir de un Set de este tipo.
  • Colecciones en Java. HashSet
    • Es la elección más habitual, excepto en Sets que sean muy pequeños. Debe tener definido el método hashCode() .
  • Colecciones en Java. LinkedHashSet
    • Similar que HashSet, con mayor eficiencia en la iteración de sus elementos. Representa una lista doblemente enlazada que no permite valores duplicados
  • Colecciones en Java. Implementación de mapas
  •  
  • Colecciones en Java. HashMap
    • Es una implementación basada en una tabla hash. Proporciona un rendimiento muy constante a la hora de insertar y localizar cualquier pareja de valores; aunque este rendimiento se puede ajustar a través de los constructores que permite fijar la capacidad y el factor de carga de la tabla hash.
  • Colecciones en Java. LinkedHashMap
    • Similar que HashMap, con mayor eficiencia en la iteración de sus elementos. Representa una lista doblemente enlazada basada en tablas hash
  • Colecciones en Java. IdentityHashMap
    • Mapa cuya comparación se efectúa a través de referencias y no valores.
  • Colecciones en Java. WeakHashMap
    • Mapa débil, ideal para gestionar colecciones temporales, cuyos elementos son referenciados en no más de 2 ocasiones.
  • Colecciones en Java. TreeMap
    • Es una implementación basada en un árbol balanceado. Cuando se observan las claves o los valores, se comprueba que están colocados en un orden concreto, determinado por Comparable o Comparator . Lo importante de un TreeMap es que se pueden recuperar los elementos en un determinado orden. TreeMap es el único mapa que define el método subMap() , que permite recuperar una parte del árbol solamente.
  • Colecciones en Java. EnumMap
    • El mapa más eficiente, el dominio de sus claves es reducido, y sus elementos siempre están ordenados por clave sin importar el orden de ingreso.
  • Colecciones en Java. Hashtable
    • Mapa similar a HasMap, ordenado por valor y no por clave.
    • Se recomienda el uso de HasMap antes de Hashtable.
  • Colecciones en Java. Properties
    • Es la única colección no genérica, utilizada ampliamente para almacenar y recuperar archivos de propiedades *.properties
  • Colecciones en Java. Implementación de colas
  • Colecciones en Java. PriorityQueue
    • Representa un cola de Prioridad, donde la prioridad la pone el orden de los elementos.
  • Resumen
    • El uso de Genéricos hacen clases de tipo seguro.
    • El framework de colecciones de Java define cuatro tipos de estructuras de datos base: Listas, Conjuntos, Mapas y Colas.
    • Todas las interfaces del framework de colecciones de Java son genéricas.
    • Java ofrece implementaciones base de las interfaces de su framework para que sean extendidas con mayor rapidez.
    • Las colecciones contienen un iterador sobre el cual se puede recorrer todos sus elementos.
  • Práctica 10
    • Objetivos
      • Hacer uso del framework de colecciones de Java
      • Identificar el correcto uso de las implementaciones de Listas, Conjuntos y Mapas.
      • Hacer uso de clases parametrizadas (genéricas)
  •