Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porRosa María Naranjo Plaza Modificado hace 8 años
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.
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.