"Y por fin, te contaré sobre Map".

"Mapa, como sabe, almacena un conjunto de pares clave-valor. Las claves deben ser únicas, pero los valores pueden ser cualquier cosa. Si agrega un par clave-valor a un mapa, y la colección ya contiene la clave, entonces el valor anterior será reemplazado por el nuevo. En otras palabras, la clave actúa como un índice especial que puede ser cualquier objeto ".

Mapa es un término matemático que denota un conjunto de pares (x, y), en el que cada x único corresponde a algún y.

Los programadores son muy aficionados a Map, por lo que aquí presentamos 4 colecciones diferentes que implementan la interfaz de Map:

"Aquí está su estructura de herencia simple:"

Jerarquía de mapas - 1

"El amarillo indica que Entrada es una interfaz anidada en la interfaz Mapa ".

"Se agregó una entrada para describir un par de elementos como una sola entidad".

"Aquí están los métodos de Map<K,V>:"

Métodos Descripción
int size() Devuelve el número de pares en el mapa.
boolean isEmpty() Comprueba si el mapa está vacío.
boolean containsKey(Object key) ¿El mapa contiene la clave especificada?
boolean containsValue(Object value) ¿El mapa contiene el valor especificado?
V get(Object key) Devuelve el valor de la clave especificada.
V put(K key, V value) Establece un nuevo valor para la clave.
El método devuelve el valor anterior o nulo
putAll(Map<? extends K, ? extends V> m) Agrega pares de otro mapa.
void clear() Borra el mapa, es decir, elimina todos los pares.
Set<K>keySet() Devuelve un conjunto de claves.
Collection<V>values() Devuelve una colección de valores.
Set<Map.Entry<K, V>>entrySet() Devuelve un Conjunto de pares.

"K y V son los parámetros de tipo para las claves y los valores".

"Bueno, estoy familiarizado con la mayoría de los métodos, pero solo he trabajado con algunos de ellos".

"¿Qué más puedes decirme sobre la clase de entrada?"

"Esta clase describe un par de elementos. Tiene algunos métodos:"

Métodos Descripción
getKey() Devuelve la clave del par clave-valor.
getValue() Devuelve el valor del par clave-valor.
setValue(V value) Establece un nuevo valor en el par clave-valor.

"La entrada es conveniente, porque puede pasar un par a un método sin pasar todo el mapa".

"Veo."

"Ahora repasaré las implementaciones de mapas".

"El primero es HashMap . Utiliza tablas hash para almacenar elementos. Las claves y los valores pueden ser de cualquier tipo, así como nulos. El orden de los elementos puede cambiar cuando cambia la colección ".

"Los elementos se almacenan en un HashMap como un conjunto de grupos o cubos. El método hashCode() de un elemento determina en qué cubo cae".

"En términos muy generales, los elementos con un código hash del 1 al 100 caen en el primer grupo, los que tienen un valor del 101 al 200 caen en el segundo, y así sucesivamente".

"El objetivo de almacenar elementos de esta manera es que podemos eliminar todos los elementos en cubos irrelevantes al buscar o eliminar elementos".

"Veo."

"Hay un artículo muy bueno sobre HashMap. Te recomiendo que lo leas: https://medium.com/@mr.anmolsehgal/java-hashmap-internal-implementation-21597e1efec3 "

"La segunda colección es LinkedHashMap . Su principal diferencia con HashMap es que también almacena elementos como una lista vinculada. En un HashMap ordinario, el orden de los elementos no está definido y puede cambiar con el tiempo. Y puede obtener un iterador de un LinkedHashMap y utilícelo para recorrer todos los elementos en el orden en que se agregaron a LinkedHashMap. Además, LinkedHashMap tiene un iterador que le permite recorrer todos los pares en orden de último uso/actividad".

"Hay un artículo realmente bueno sobre LinkedHashMap. Aquí tienes: https://medium.com/@mr.anmolsehgal/java-linkedhashmap-internal-implementation-44e2e2893036 "

"La tercera colección de la que me gustaría hablar hoy es TreeMap ".

" TreeMap mantiene sus elementos ordenados en orden ascendente. Esto se logra debido al hecho de que TreeMap utiliza un árbol rojo-negro equilibrado para almacenar elementos".

"Como resultado, el tiempo de inserción y el tiempo de búsqueda son muy bajos. Esta clase es una excelente opción cuando se usan cantidades muy grandes de datos".

"Y, por supuesto, tenemos un artículo sobre TreeMap: https://medium.com/xebia-engineering/treemap-internals-199e0e0050b5 "

"¿Qué no te he contado todavía?"

"WeakHashMap, pero Rishi me lo contó hace un par de días".

"¿Cuando fue eso?"

"Cuando habló de SoftReference, WeakReference y PhantomReference".

"Te creo, considerando que los nombraste a todos correctamente. Entonces ve a relajarte. Nos vemos esta noche".

"Adiós, Ellie".