Has yHasMap
Has yHasMap
Map
¿Para qué sirven?
Definición
El tipo de dato Map, incluido en el paquete java.util, permite modelar el concepto de aplicación: una
relación entre los elementos de dos conjuntos de modo que a cada elemento del conjunto inicial le
corresponde uno y solo un elemento del conjunto final. Los elementos del conjunto inicial se
denominan claves (keys) y los del conjunto final valores (values).
En la figura 1 puede verse un ejemplo de Map. En este caso las claves son cadenas de caracteres,
cada una de las cuales representa un valor numérico en diversas representaciones textuales, y los
valores son enteros.
Cada cadena tiene asociada el valor numérico correspondiente
Como entre las claves no puede haber elementos duplicados (una clave no puede estar asociada
con más de un valor), las claves forman un conjunto (Set). Sin embargo, sí que puede haber
valores duplicados, por los que estos están en una Collection.
Por tanto, un Map está definido por un conjunto de claves, una colección de valores y un conjunto
de pares clave-valor (también llamadas entradas), que son realmente los elementos de los que
está compuesto.
Dentro de la jerarquía de tipos de Java, Map no extiende a Collection ni a Iterable. Por tanto, no se
puede aplicar un for extendido sobre sus elementos, es decir, sobre sus pares, salvo que
accedamos explícitamente a ellos. Los Map se utilizan en muchas situaciones. Por ejemplo, los
llistados telefónicos (clave: nombre del contacto, valor: número de teléfono), listas de clase (clave:
nombre del alumno, valor: calificaciones), ventas de un producto (clave: código de producto, valor:
total precio de venta), índices de palabras por páginas en un libro (clave: palabra, valor: lista de
números de página donde aparece), la red de un Metro (clave: nombre de la estación, valor:
conjunto de líneas que pasan por esa estación, o al revés, clave: número de línea, valor: lista de
estaciones de esa línea), etc.
Tiene también muchas otras aplicaciones en informática: representar diccionarios o propiedades,
almacenar en memoria tablas de bases de datos, cachés, etc.
Centrándonos en Java, la interfaz Map tiene dos tipos genéricos, que suelen denominarse K (de
Key) y V (de Value): Map<K, V>.
La clase que implementa la interfaz Map es HashMap (aunque también se puede utilizar TreeMap).
La clase HashMap obliga a definir de forma correcta el método hashCode del tipo de las claves
para evitar comportamientos incorrectos, como claves repetidas. Asimismo, al igual que pasa en el
tipo Set, los objetos mutables que se introducen en un Map son “vistas” o referencias a objetos y,
por tanto, si estos cambian, el Map puede dejar de ser coherente, esto es, podría tener claves
repetidas.
Un Map cuyas claves sean String y cuyos valores sean Integer se definiría e inicializaría de la
siguiente forma:
¿Cuáles son sus métodos principales?
Los métodos del tipo Map se relacionan a continuación. La información completa sobre este tipo se
puede
encontrar en la API de Java1
- Java.util.HashMap.
Un HashMap es la implementación de la interface Map, esta interface es un tipo de Collection que
almacena datos asociando una llave a un valorMap<key, value>. key= la llave. value= String,
Integer, Boolean..., esta interface sirve para muchas cosas y tiene ciertas caracteristicas que la
definen, por ejemplo, no permite key duplicados, cada key tiene que estar asociado a un valor
como máximo, si agregas un key que ya existe sobrescribe el valor del key anterior, solo permite
Object types lo que quiere decir que no puedes poner un valor primitivo.
Salida:
Elementos del mapa:
{Tipo = vehículo de 2 ruedas, precio = 85000, potencia = 220, nombre = Suzuki}
Métodos principales.
int size(): Devuelve el número de parejas el Map
Object get(Object key): Devuelve un objeto dada su clave-key
Object remove(Object key): Elimina una pareja con una clave-key dada
void clear(): Elimina todas las parejas clave-valor agenda.clear();
boolean containsKey(Object key): Comprueba la existencia de una clave.
boolean existe = agenda.containsKey(“Ana”);
boolean containsValue(Object value): Comprueba la existencia de un valor.
boolean existe = agenda.containsValue(963258741);
Set keySet(): Devuelve las claves del Map en un Set (conjunto)
Set claves = agenda.keySet();
Collection values(): Devuelve una colección con los valores del Map
Collection valores = agenda.values();