La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Tipos SortedSet, Map y SortedMap Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.0 Unidad Didáctica 16.

Presentaciones similares


Presentación del tema: "Tipos SortedSet, Map y SortedMap Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.0 Unidad Didáctica 16."— Transcripción de la presentación:

1 Tipos SortedSet, Map y SortedMap Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.0 Unidad Didáctica 16

2 UD16: Tipos SortedSet, Map y SortedMap Índice  Concepto de Conjunto Ordenado  Tipo SortedSet  Métodos  Implementación  Concepto de Función (Map)  Tipo Map  Métodos  Implementaciones  Tipo SortedMap  Métodos  Implementaciones

3 UD16: Tipos SortedSet, Map y SortedMap Índice  Concepto de Conjunto Ordenado  Tipo SortedSet  Métodos  Implementación  Concepto de Función (Map)  Tipo Map  Métodos  Implementaciones  Tipo SortedMap  Métodos  Implementaciones

4 UD16: Tipos SortedSet, Map y SortedMap Concepto de Conjunto Ordenado  Recordemos que el tipo Set se corresponde con el concepto matemático de conjunto, y que sus operaciones son: // Operaciones básicas int size(); boolean isEmpty(); boolean contains(Object o); // Operaciones modificadoras boolean add(T e); boolean remove(Object o); // Operaciones con grupos de elementos boolean containsAll(Collection c); boolean addAll(Collection c); boolean removeAll(Collection c); boolean retainAll(Collection c); void clear();...

5 UD16: Tipos SortedSet, Map y SortedMap Tipo SortedSet  Un conjunto ordenado (SortedSet) es un conjunto en el que sus elementos ( ) tienen definida una relación de orden total que permite recorrer u obtener los elementos según ese orden. T tiene que ser Comparable. > Iterable > Collection > Set > SortedSet

6 UD16: Tipos SortedSet, Map y SortedMap Tipo SortedSet. Métodos public interface SortedSet extends Set { // Elemento mínimo (primero) y máximo (último) T first(); T last(); // Vistas de rangos SortedSet headSet (T toElement); SortedSet tailSet (T fromElement); SortedSet subSet (T fromElement, T toElement); // Comparador utilizado Comparator comparator(); } Nota: información detallada del contrato en http://java.sun.com/javase/6/docs/api/ - java.util – interfaz SortedSet

7 UD16: Tipos SortedSet, Map y SortedMap Tipo SortedSet. Métodos  Las vistas siempre incluyen al primer elemento y excluyen al último. Por ejemplo, si se ejecuta el siguiente código: SortedSet ss = new TreeSet (); ss.add('X'); ss.add('C'); ss.add('F'); ss.add('P'); ss.add('R'); ss.add('Q'); mostrar("ss = " + ss); SortedSet inicio = ss.headSet('G'); SortedSet medio = ss.subSet('G', 'R'); SortedSet fin = ss.tailSet(‘R'); mostrar(“ss.headSet('G') = " + inicio); mostrar(“ss.subSet('G', 'R') = " + medio); mostrar(“ss.tailSet(‘R') = " + fin);  se mostrará: ss = [C, F, P, Q, R, X] ss.headSet('G') = [C, F] ss.subSet('G', 'R') = [P, Q] ss.tailSet(‘R') = [R, X]

8 UD16: Tipos SortedSet, Map y SortedMap Tipo SortedSet. Métodos  ss.headSet(‘G’) son los estrictamente menores que ‘G’.  ss.subSet(‘G’, ‘R’) son los elementos de ss mayores o iguales que ‘G’ y menores que ‘R’.  ss.tailSet(‘R’) son los elementos mayores o iguales que ‘R’.  Lo que devuelven estas operaciones son “vistas” respaldadas por el conjunto original: modificaciones en el conjunto repercuten en las vistas y viceversa. ss.subSet(‘G’, ‘R’) = ‘P’‘Q’ ss = ‘C’‘F’‘P’‘Q’‘R’‘X’ ss.headSet(‘G’) = ‘C’‘F’ ss.tailSet(‘R’) = ‘R’‘X’ < ‘G’ >= ‘G’ <‘R’ >= ‘R’

9 UD16: Tipos SortedSet, Map y SortedMap Tipo SortedSet. Métodos  Por ejemplo, si a continuación se ejecuta: mostrar("ss = " + ss); fin.add('S'); mostrar(“ss.tailSet(‘R') tras fin.add('S') = " + fin); mostrar("ss tras fin.add('S') = " + ss); ss.add('D'); mostrar("ss tras ss.add('D') = " + ss); mostrar(“ss.headSet('G') tras ss.add('D') = " + inicio);  se mostrará: ss = [C, F, P, Q, R, X] ss.tailSet(‘R') tras fin.add('S') = [R, S, X] ss tras fin.add('S') = [C, F, P, Q, R, S, X] ss tras ss.add('D') = [C, D, F, P, Q, R, S, X] ss.headSet('G') tras ss.add('D') = [C, D, F]

10 UD16: Tipos SortedSet, Map y SortedMap Tipo SortedSet. Métodos  En las vistas devueltas por las operaciones con rangos sólo se puede actuar sobre el rango delimitado por el inicio y fin. Por ejemplo, si se ejecuta el siguiente código: mostrar("inicio = headSet('G') = " + inicio); inicio.add('G');  se eleva la excepción: java.lang.IllegalArgumentException: key out of range  headSet, tailSet y subSet elevan la excepción IllegalArgumentException si el argumento está fuera de rango.  subSet eleva la excepción IllegalArgumentException si el elemento inicial es mayor que el final.  first y last elevan la excepción NoSuchElementException si el conjunto está vacío.

11 UD16: Tipos SortedSet, Map y SortedMap Tipo SortedSet. Métodos  El for extendido actúa en el orden que induce la ordenación en el conjunto ordenado: SortedSet ss = new TreeSet (); ss.add('X'); ss.add('C'); ss.add('F'); ss.add('P'); ss.add('R'); ss.add('Q'); for (Character ch : ss) { mostrar(ch); }  muestra: C F P Q R X

12 UD16: Tipos SortedSet, Map y SortedMap SortedSet. Implementación y constructores  La implementación del tipo SortedSet es la clase TreeSet.  Tiene cuatro constructores:  TreeSet(). Construye un conjunto ordenado vacío. Los elementos se ordenarán según su orden natural.  TreeSet(Collection c). Construye un conjunto ordenado que contendrá los elementos de c. Los elementos se ordenarán según su orden natural.  TreeSet(Comparator comparator). Construye un conjunto ordenado vacío. Los elementos se ordenarán según el comparador.  TreeSet(SortedSet s). Es el constructor copia. Construye un nuevo conjunto ordenado con los mismos elementos que s y ordenado según el mismo criterio que s.

13 UD16: Tipos SortedSet, Map y SortedMap SortedSet. Problemática del Comparator  El tercer constructor TreeSet(Comparator comparator) utiliza un Comparator. Esto introduce algo que hay que tener en cuenta:  En los conjuntos ordenados dos elementos se consideran iguales si el comparador entre ellos devuelve cero.  En los conjuntos ordenados que usan Comparable, compareTo debe ser compatible con equals: dos elementos son iguales si compareTo devuelve cero y viceversa; por tanto el conjunto ordenado se comportará normalmente.  Por ejemplo: si tenemos personas identificadas por el NIF (compareTo y equals usan el nif), como todas las personas tienen número distintos, no habrá problema: estarán ordenadas por ese número.  Si se ha utilizado el tercer constructor, los elementos se ordenan según el Comparator suministrado en la creación.

14 UD16: Tipos SortedSet, Map y SortedMap SortedSet. Problemática del Comparator  Si tenemos un Comparator por apellidos-nombre, para tenerlos por orden alfabético, ¡las personas que tengan los mismos nombre y apellidos desaparecerán!  Lo mismo ocurre si tenemos un Comparator por estatura (sólo quedará una persona de cada estatura que haya), por edad (habrá sólo uno por edad) o por sexo (sólo quedarán, como mucho, dos).  Esto se puede resolver utilizando el compareTo como criterio de desempate. Por ejemplo: public int compare(Persona p1, Persona p2) { int cmp = p1.getNombre().compareTo(p2.getNombre()); if (cmp == 0) { cmp = p1.compareTo(p2); } return cmp; }

15 UD16: Tipos SortedSet, Map y SortedMap Índice  Concepto de Conjunto Ordenado  Tipo SortedSet  Métodos  Implementación  Concepto de Función (Map)  Tipo Map  Métodos  Implementaciones  Tipo SortedMap  Métodos  Implementaciones

16 UD16: Tipos SortedSet, Map y SortedMap Concepto de Función ( Map )  Una Función (Map) es un tipo de datos que permite asociar una clave con un valor. Un Map no puede tener claves duplicadas.  Podemos considerar sus elementos como pares clave-valor (también llamados entradas).  Ejemplo: una función que asocia cadenas que representan números de matrícula (clave) con objetos de la clase vehículo, compuesto por las propiedades tipo de vehículo, marca, modelo y color (valor). MatrículaVehículo SE-8594-CHMotocicleta, Yamaha. 250 Special, Burdeos 2354-FCDAutomóvil, Volkswagen, Polo, Azul 8955-DDPAutomóvil, Seat, León, Amarillo CA-71252Automóvil, Simca, 1000, Blanco 2287-BAHCamión. Volvo FM12 42, Blanco

17 UD16: Tipos SortedSet, Map y SortedMap Concepto de Función ( Map )  Se corresponde con el concepto matemático de función (no inyectiva, puesto que un valor puede estar asociado a más de una clave). 1+1 “uno” “1”“1” “I”“I” “2”“2” “ II ” “ 1.0 ” 1 2

18 UD16: Tipos SortedSet, Map y SortedMap Concepto de Función ( Map )  Map NO extiende a Collection. NO es iterable.  Tiene dos tipos genéricos: el tipo de las claves (que representaremos como K) y el de los valores asociados (que representaremos como V).  Ejemplos cotidianos de maps son los listines telefónicos (clave: nombre contacto, valor: número de teléfono), listas de clase (clave: nombre del alumno, valor: calificaciones), etc.  Tiene muchas aplicaciones en programación: representar diccionarios y propiedades, almacenar en memoria tablas de bases de datos, cachés, etc. > Map > SortedMap

19 UD16: Tipos SortedSet, Map y SortedMap Tipo Map. Métodos public interface Map { // Operaciones observadoras int size(); boolean isEmpty(); boolean containsKey(Object key); boolean containsValue(Object value); V get(Object key); // Operaciones modificadoras V put(K key, V value); V remove(Object key); // Operaciones con grupos de elementos void putAll(Map m); void clear();

20 UD16: Tipos SortedSet, Map y SortedMap Tipo Map. Métodos // Vistas Set keySet(); Collection values(); }

21 UD16: Tipos SortedSet, Map y SortedMap Tipo Map. Métodos Las operaciones que no tienen significados obvios son:  put(key, value) añade a la función la clave key, a la que le asocia el valor value. Devuelve el valor que previamente tuviera asociada la clave, si ya estaba en la función o null en caso contrario.  get(key) devuelve el valor asociado con la clave key, si ésta existe en la función o null si no existe.  remove(key) elimina la clave key si estaba en la función, en cuyo caso devuelve el valor que tuviera asociado. Si no existía esa clave, no hace nada y devuelve null.

22 UD16: Tipos SortedSet, Map y SortedMap Tipo Map. Métodos  keySet() devuelve el conjunto de las claves que forman parte de la función. Como es un conjunto SÍ es iterable.  values() devuelve una Collection con los valores que contiene la función. Puede haber elementos duplicados, de ahí que sea una Collection y no un Set. También es iterable.  Los objetos devueltos por estas operaciones son vistas del map original, por lo que las modificaciones que se hagan sobre el map original repercutirán en las vistas devueltas y viceversa. Nota: información detallada del contrato en http://java.sun.com/javase/6/docs/api/ - java.util – interfaz Map

23 UD16: Tipos SortedSet, Map y SortedMap Tipo Map. Métodos  Ejemplo. Si ejecutamos el código: Map m = new HashMap (); m.put("uno", 1); m.put("dos", 2); m.put("tres", 3); m.put("cuatro", 4); m.put("cinco", 5); m.put("5", 5); m.put("3", 3); mostrar("m = " + m); Set claves = m.keySet(); claves.remove("dos"); mostrar("m tras eliminar la clave dos = " + m); Collection valores = m.values(); valores.remove(3); mostrar("m tras eliminar el valor 3 = " + m);

24 UD16: Tipos SortedSet, Map y SortedMap Tipo Map. Métodos  obtenemos la salida: m = {3=3, cuatro=4, tres=3, 5=5, cinco=5, uno=1, dos=2} m tras eliminar la clave dos = {3=3, cuatro=4, tres=3, 5=5, cinco=5, uno=1} m tras eliminar el valor 3 = {cuatro=4, tres=3, 5=5, cinco=5, uno=1}  Si intentamos ejecutar: claves.add("siete"); o valores.add(7);  se eleva la excepción UnsupportedOperationException.

25 UD16: Tipos SortedSet, Map y SortedMap Tipo Map. Implementaciones  Map tiene una implementación natural, la clase HashMap, que es para la que tiene utilidad el método hashCode().  También puede implementarse mediante la clase TreeMap.  HashMap tiene cuatro constructores, de los que veremos dos:  HashMap() construye un Map vacío.  HashMap(Map m) es el constructor copia: crea un nuevo Map que contiene los mismos pares que m.

26 UD16: Tipos SortedSet, Map y SortedMap Tipo SortedMap. Métodos  Map tiene un subtipo denominado SortedMap, análogo al SortedSet. Sus claves tienen que tener un criterio de ordenación. Se obtendrán los elementos o se iterará sobre ellos según ese orden. public interface SortedMap extends Map { Comparator comparator(); SortedMap subMap(K fromKey, K toKey); SortedMap headMap(K toKey); SortedMap tailMap(K fromKey); K firstKey(); K lastKey(); }  La semántica de las operaciones es similar a las correspondientes del SortedSet Nota: información detallada del contrato en http://java.sun.com/javase/6/docs/api/ - java.util – interfaz SortedSet

27 UD16: Tipos SortedSet, Map y SortedMap Tipo SortedMap. Implementación  La clase que implementa el tipo SortedMap  Tiene cuatro constructores:  TreeMap() construye una función ordenada vacía usando el orden natural de las claves.  TreeMap(Comparator comparator) construye una función ordenada vacía, donde las claves se ordenarán según el comparador.  TreeMap(Map m) construye una nueva función ordenada que contendrá los mismos pares que m y usará el orden natural de sus claves.  TreeMap(SortedMap m) es el constructor copia. Crea una copia del SortedMap que recibe.


Descargar ppt "Tipos SortedSet, Map y SortedMap Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.0 Unidad Didáctica 16."

Presentaciones similares


Anuncios Google