20260304 Map_2 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
El map, ya sabemos lo que es, es una estructura de almacenamiento de datos donde cada dato es un par.
00:00:02
Cada dato ahora tiene dos partes, ¿vale? Luego un map es un almacén de pares.
00:00:10
Esas partes del par, uno es la clave y otro es el valor, así es como se llaman, ¿vale? Se llaman clave y valor.
00:00:17
¿Qué significan? Pues la clave se supone que se usa para identificar de forma única
00:00:24
los verdaderos datos, que son los que están en los valores
00:00:32
Luego los datos están en los valores, tienen cada uno de ellos un identificador único
00:00:35
y ese identificador único en vez de guardarse dentro del propio valor, que puede guardarse dentro
00:00:42
Pues además se saca fuera y se mete en la clave
00:00:47
Luego el par está compuesto por esa clave
00:00:52
Que identifica de forma única
00:00:55
Y ya el dato en sí
00:00:56
Puede tener dentro lo que sea
00:00:58
Incluida la propia clave
00:01:00
No pasa nada, incluida la propia clave
00:01:02
Para que así esté más completo
00:01:05
El conjunto de datos
00:01:06
Estará más completo porque está todavía recogidito
00:01:08
Pero para facilitar
00:01:11
Luego ya la gestión, el recorrido
00:01:13
Y todo eso del map
00:01:15
Esa clave está puesta fuera
00:01:16
Además
00:01:18
en el par
00:01:19
en el par del mal, vale, pues entonces
00:01:23
vimos como se declaraba
00:01:25
pues en este ejemplito
00:01:27
esta es la interfaz que tiene varias implementaciones
00:01:28
esta es una
00:01:32
interpretación, pues la más
00:01:33
habitual
00:01:36
vale, entonces en esta implementación
00:01:36
lo que dijimos ayer es
00:01:40
que las claves
00:01:42
se guardan en un hash set
00:01:43
entonces, eso que
00:01:45
implica? Bueno, pues que nosotros
00:01:47
ya entonces tenemos conocimiento
00:01:49
de que el map por dentro, cuando
00:01:51
tenga que insertar, recuperar, hacer cosas,
00:01:53
pues trabajará con un haset de claves.
00:01:55
Y como nosotros sabemos
00:01:58
que para que Java pueda
00:01:59
trabajar correctamente con un haset,
00:02:01
la clase
00:02:04
a la que pertenecen los elementos de ese
00:02:05
haset tiene que tener hasco de equals,
00:02:07
porque si no,
00:02:10
no va a comprobar correctamente su igualdad
00:02:11
y eso es básico para poder trabajar
00:02:14
con ese haset, pues como sabemos
00:02:15
que todo lo que
00:02:18
esté en un haset
00:02:20
tiene que tener jasco de equals
00:02:22
pues la clase a la que pertenecen las claves
00:02:23
tenemos que asegurarnos de que
00:02:26
tenga jasco de equals, ya está, es lo único
00:02:28
que implica el haber decidido
00:02:30
un hasmat como estructura
00:02:32
para nuestro mac
00:02:34
asegurarnos que esta clase de aquí
00:02:35
tenga jasco de equals, en este ejemplito
00:02:38
primero como string tiene jasco de equals
00:02:40
pues ya está, no pasa nada
00:02:42
Entonces, ¿qué vimos? Pues como
00:02:44
Insertar pares
00:02:47
Como insertar pares, put
00:02:49
¿Vale? Porque las colecciones
00:02:51
Son para eso, para meter cosas
00:02:53
Sacarlas, ver lo que hay
00:02:55
Que ese es el recorrido o la consulta
00:02:57
Y eliminarlas
00:02:59
¿Vale? Recordad que esas son las cuatro
00:03:00
Acciones básicas que se pueden hacer
00:03:03
Con los datos
00:03:05
Con cualquier almacén de datos
00:03:06
Me da igual que sea una base de datos
00:03:09
Una colección que tengo yo en memoria
00:03:10
en mi aplicación, con cualquier
00:03:13
almacén de datos, esas son las únicas cuatro
00:03:15
cosas que puedo hacer
00:03:17
insertar
00:03:18
consultar
00:03:21
actualizar
00:03:25
y borrar
00:03:28
esas son las cuatro acciones
00:03:32
que yo puedo hacer con cualquiera
00:03:35
que tengo que poder hacer con cualquier almacén de datos
00:03:37
y no necesito hacer ninguna otra
00:03:39
ahora ya cualquier otra acción más compleja
00:03:40
es una composición de cualquiera
00:03:43
de ellas y ya está
00:03:45
¿Vale? Bueno, pues
00:03:46
Insertar en un map
00:03:48
Pues esto
00:03:50
¿Vale? Insertar en un map
00:03:52
Entonces, este put ya sabemos que
00:03:55
Si la clave no existe
00:03:56
Inserta
00:03:59
Pero si la clave existiera
00:03:59
Se comporta como una
00:04:03
Actualización, ¿vale?
00:04:05
Si la clave existiera, se comporta como una
00:04:07
Actualización
00:04:10
¿Qué más métodos vimos del map?
00:04:11
Recuperar
00:04:17
recuperar por clave
00:04:18
¿no?
00:04:22
claro
00:04:24
uy
00:04:24
perdón
00:04:25
vale
00:04:26
pues este
00:04:28
recuperar por clave
00:04:29
entonces me devuelve
00:04:30
el valor
00:04:34
el objeto
00:04:35
asociado a esta clave
00:04:37
si es que existe
00:04:39
si no existe
00:04:41
me devuelve un nul
00:04:42
y se acabó
00:04:43
me devolverá nul
00:04:44
¿vale?
00:04:45
entonces en este caso
00:04:47
en este ejemplito
00:04:48
pues
00:04:49
este era el alumno
00:04:50
asociado a esta clave
00:04:52
que yo lo cojo directamente
00:04:54
con un icoget y esa era la ventaja
00:04:56
del map
00:04:58
que
00:04:59
es la que aporta respecto a la lista
00:05:00
que yo quiero el alumno con un DNI
00:05:04
siendo el DNI la clave
00:05:06
me hago el get y ya está
00:05:08
que esos alumnos están todos en una lista
00:05:09
y necesito el alumno
00:05:12
con ese DNI
00:05:14
pues me tengo que meter en la lista
00:05:15
recorrerla hasta que encuentro el alumno
00:05:18
con ese DNI
00:05:20
Entonces esto es
00:05:21
Un acceso mucho más rápido
00:05:23
Porque es directamente por la clave
00:05:24
Gracias a que la he sacado fuera
00:05:26
¿Vale?
00:05:28
Bueno
00:05:30
Eliminar
00:05:31
Pues eliminar
00:05:35
Pues tendrá algún método para eliminar
00:05:40
Lógicamente
00:05:43
Vamos a ver que métodos tiene
00:05:44
Map
00:05:46
Para echarles un vistazo
00:05:47
A ver como es el de eliminar
00:05:54
¿Vale?
00:05:55
Pues map tiene
00:05:57
Antes de que encontremos el de eliminar
00:05:58
Pues fijaos, este clear tiene toda la pinta
00:06:01
Por nombre
00:06:04
Que limpia el map
00:06:05
Lo deja vacío, borra todos los elementos
00:06:07
Tiene pinta, ¿verdad?
00:06:10
Es lo que dice aquí
00:06:11
Borra todos los pares de este map
00:06:12
El map estará vacío
00:06:16
Que no null
00:06:18
¿Vale? El map se queda vacío
00:06:19
Vale
00:06:22
Entonces, bueno, aquí tiene
00:06:24
más métodos, vamos a buscar el de
00:06:25
borrar por clave
00:06:27
porque este es el que borra a todos
00:06:29
vale, pues si borra
00:06:31
buscamos a ver como es el de, pues no, tiene toda la pinta
00:06:33
de que es este
00:06:35
¿vale? veis es un método
00:06:36
sobrecargado, tiene dos versiones
00:06:41
borrar por clave
00:06:43
este, el más sencillo
00:06:45
borrar por clave
00:06:47
borra el par
00:06:48
borra el par de correspondiente
00:06:50
a esta clave, si esta clave está
00:06:53
¿vale?
00:06:55
Y si no está, pues no puede hacer nada, lógicamente.
00:06:57
¿Y qué te devuelve?
00:07:01
Te devuelve el objeto borrado.
00:07:03
Te lo devuelve, además.
00:07:07
Tú lo puedes tirar a la basura o quedártelo para hacer algo.
00:07:08
O sea, lo elimina del map y te lo da como valor de retorno.
00:07:11
Pues yo qué sé, por si quieres hacer algo con él.
00:07:15
Es como si fuera en la pila el pop que saca de la pila.
00:07:17
Pero en este caso no sacas de la cima, sino que sacas por clave.
00:07:20
si no existiera
00:07:25
te devuelve un null
00:07:27
eso que significa
00:07:28
que este objeto
00:07:31
nos vale para verificar
00:07:33
si realmente se ha borrado
00:07:36
un elemento o no se ha borrado
00:07:38
si esto me devuelve null, no he hecho ningún
00:07:39
borrado porque no existía
00:07:42
si esto me devuelve diferente de null
00:07:43
pues si, he hecho un borrado
00:07:46
y además el objeto que he eliminado es
00:07:47
este, el valor que he eliminado es ese
00:07:50
no, no te muestra nada
00:07:52
te lo devuelve con valor de retorno
00:07:56
tú si lo recoges
00:07:58
luego ya haces con él lo que quieras si quieres hacer algo
00:07:59
si quieres hacer algo
00:08:02
borrado ya se queda, es lo que se supone que para que
00:08:03
llamamos a esto
00:08:06
tiene otra variante aquí
00:08:06
remove
00:08:10
que esta
00:08:10
te borra el elemento con esta clave
00:08:12
pero solo si coincide con
00:08:15
este valor, o sea es un
00:08:18
remove un poco más extraño
00:08:20
normalmente nosotros cuando queremos
00:08:21
eliminar, queremos eliminar por clave y ya está
00:08:24
Pero bueno, tiene esta otra versión
00:08:26
El remove
00:08:28
Que esto es lo que dice que hace
00:08:29
Te borra el elemento con esta clave
00:08:32
Pero solo te lo borra si es
00:08:34
Igual
00:08:36
A este
00:08:37
Igual ya sabéis que significa
00:08:39
Que la llamada al método equals de este objeto
00:08:41
Pues te de
00:08:44
Esto es lo que dice que hace
00:08:45
Pero bueno, es otra versión de remove
00:08:47
Pues yo que sé
00:08:49
Si realmente lo encontró
00:08:50
Y por tanto lo borró, te devuelve true
00:08:54
Y si no, falso.
00:08:55
Entonces, eliminar sería eso, ¿verdad?
00:08:59
Luego que nosotros queremos eliminar por clave, pues nada, esto nos eliminaría, lógicamente, nos eliminaría el alumno con esta clave.
00:09:08
Si yo quiero verificar si realmente lo he eliminado yo, lo he eliminado o no, pues podría hacer esto.
00:09:26
por ejemplo
00:09:32
si es diferente de null
00:09:33
pues entonces
00:09:37
alumno eliminado
00:09:38
vale, por ejemplo
00:09:43
así podría hacer un borrado
00:09:47
por clave y además
00:09:49
confirmar si se ha borrado
00:09:51
algo o no, porque si esta clave
00:09:53
no existiera pues no se ha borrado nada
00:09:55
yo le doy al remove, confío en que se ha borrado
00:09:57
pero no se ha borrado porque no existe
00:09:59
entonces si yo quiero una realimentación
00:10:01
quiero
00:10:03
no, el true o false da cuando
00:10:04
la otra versión de remove
00:10:08
este te devuelve el objeto borrado
00:10:09
yo aquí, el objeto borrado
00:10:11
no me ha interesado cogerlo, pero si me ha interesado
00:10:14
verificar que sea diferente de null
00:10:16
solo eso, para
00:10:18
dar una información sobre el ya borrado
00:10:19
es que no devuelve
00:10:22
este devuelve el objeto borrado
00:10:29
pero con la exclamación
00:10:31
¿dónde?
00:10:34
no, la exclamación
00:10:34
solo la puedo poner
00:10:37
si
00:10:38
hombre
00:10:40
a ver, si
00:10:45
la JDK25
00:10:47
permite que tú niegues algo
00:10:49
que no sea boolean, espero que yo sepa
00:10:51
no, pero
00:10:53
no es necesario
00:10:57
vamos, si es mucho más sencillo así
00:10:59
a ver, quítate de la cabeza Python
00:11:01
ya
00:11:03
sí, pero hablo en general
00:11:05
hablo en general porque
00:11:07
Python juega usted también, lo que pasa es que bueno
00:11:09
que C tiene la solera
00:11:12
así hay que respetarle
00:11:14
pero es verdad que Python en general
00:11:15
tiene
00:11:18
atajos para todo, facilidades
00:11:19
para todo, todo y bueno, vale
00:11:22
sí, eso en algunos contextos
00:11:24
está bien, pero
00:11:26
pero claro, Java es otro rollo
00:11:27
aunque claro
00:11:30
en cada versión que se hace de Java
00:11:31
incorpora 3 o 4 chorraditas
00:11:34
cada versión, hay algunas versiones
00:11:36
que han sido las de toma
00:11:38
menos mal que llegó porque lo ha cambiado todo
00:11:39
Java 8 que incorporó toda la programación funcional
00:11:41
luego no sé cuál
00:11:44
Java 10 creo que fue módulo
00:11:46
y luego al margen de las versiones
00:11:47
que llegan y dicen toma
00:11:50
que guay que ha incorporado todo esto
00:11:51
luego cada versión pues incorpora chorraditas
00:11:53
porque es normal, tienen que justificar su sueldo
00:11:56
lógicamente
00:11:58
entonces algunas de estas chorraditas
00:11:59
pues van un poco en el sentido
00:12:02
de hacer atajos, hacer pues como
00:12:03
el main, acortar, pero cosas de esas
00:12:05
¿vale? entonces
00:12:07
lo que pasa es que
00:12:09
uy, nulo
00:12:13
este atajo en particular
00:12:14
se me haría a mí un poco feo
00:12:17
no sé, que podría llegar contra la
00:12:20
filosofía un poquito de
00:12:22
lenguajes tipados
00:12:24
¿vale? el lenguaje es no, aunque C es tipado
00:12:25
también, lenguajes no tipados, pues sí tiene
00:12:27
sentido, pero en tipados, no sé, negar
00:12:29
un valor que no sea boolean, es raro
00:12:32
vale
00:12:34
bueno, pues entonces
00:12:36
ya está, eliminar
00:12:37
entonces, ¿qué más cosas hemos dicho
00:12:44
que tenía el CRUD?
00:12:46
no hemos recorrido todavía para hacer consultas
00:12:48
pues, actualizar
00:12:50
actualizar
00:12:52
hemos dicho que el PUT nos vale
00:12:54
para actualizar
00:12:56
el PUT nos vale
00:12:57
pero cuidado porque el put no es una actualización solo
00:13:04
es actualización o inserción
00:13:07
entonces puede ser
00:13:09
que yo necesite actualizar un dato
00:13:13
si ese dato existe y si no existe
00:13:16
pues no insertarlo de nuevas, solamente actualizar si existe
00:13:18
entonces para eso el put no me valdría
00:13:22
porque si yo hago esto
00:13:24
si, esto me actualiza el alumno este de aquí
00:13:26
pero si no existiera
00:13:30
porque yo he escrito mal la clave
00:13:32
y no existe, entonces yo no quiero
00:13:34
que se meta uno nuevo con esa clave errónea
00:13:36
no quiero que se meta uno nuevo
00:13:38
entonces tiene sentido que exista un método
00:13:40
que solamente
00:13:42
actualice la clave que tú le das
00:13:43
y si esa clave no exista, que no haga
00:13:46
nada, que no haga nada
00:13:48
vale, pues ese método existirá
00:13:50
pues seguro, verdad
00:13:52
como de costumbre
00:13:56
si uno cuando desarrolla
00:13:58
una librería
00:14:00
escoge bien los nombres
00:14:02
pues va a facilitar la vida al que lo busca
00:14:03
nosotros vamos por aquí
00:14:06
y rápidamente tendríamos que ver
00:14:08
algo que tenga toda la pinta de que es eso
00:14:10
y bueno
00:14:12
nos suena
00:14:14
a este, ¿verdad?
00:14:16
nos suena a este por el nombre, porque está bien elegido
00:14:20
pues este es el que
00:14:22
el valor con esta clave
00:14:24
te lo sustituye
00:14:28
con este objeto
00:14:30
si es que existe la clave
00:14:31
Si no, no hace nada
00:14:33
¿Verdad?
00:14:35
Te sustituye
00:14:37
El valor de esa clave
00:14:38
Solo si existe
00:14:40
Si no, nada
00:14:42
Con lo cual no es exactamente como el put
00:14:43
Porque el put además te insertaría
00:14:46
¿Vale?
00:14:48
¿Vale? Y bueno
00:14:54
Está sobrecargado
00:14:55
Tiene dos
00:14:57
Tiene otra versión aquí
00:14:58
Que te sustituye
00:15:02
El valor
00:15:05
de esta clave
00:15:07
el valor de esta clave
00:15:07
pero solo si se corresponde con este
00:15:09
es decir, si esta clave
00:15:12
verifica que se corresponde
00:15:14
con este valor, entonces te lo cambia
00:15:16
a este otro, si no se corresponde
00:15:18
con ese, pues no
00:15:20
es como la otra versión del remove
00:15:21
que le dabas dos parámetros
00:15:24
si el valor asociado a la clave coincide
00:15:25
te lo elimina, si no, no
00:15:28
pues aquí, si el valor asociado a esta clave
00:15:29
te coincide con este, te lo sustituye
00:15:32
con el otro, si no, no
00:15:34
¿verdad que sí?
00:15:35
Vale, ahora vamos a recorrer, actualizar, bueno, ahora lo más retorcidillo, vale,
00:15:39
¿Cómo que no es la misma?
00:17:07
Bueno, a ver, he puesto una al azar
00:17:16
Pues si no, entonces no hace nada
00:17:18
Pero vamos, que el método es este
00:17:19
¿Vale? Es decir, el método es
00:17:21
Si esta clave existiera, que no lo sé
00:17:23
Te lo sustituye por este
00:17:25
Y si no existe, nada
00:17:26
No como el put, que sí que te inserta
00:17:28
¿Vale? Recorrer
00:17:30
Para ver todo lo que hay
00:17:32
Pues en realidad hay muchas formas
00:17:37
Como uno se puede plantear recorrer
00:17:41
¿Vale?
00:17:44
Esto no es tan fácil como un for each, porque el map tiene dos cosas, el map tiene la clave y el valor, es decir, es un conjunto de pares, entonces, ¿qué recorres? Recorres las claves, recorres los valores, ¿cómo haces? El for each, así a palo seco, no puedes.
00:17:47
Bueno, pues hay varias posibilidades
00:18:01
Usar unos métodos que te devuelven solo las claves
00:18:04
O solo los valores
00:18:09
Y recorrer eso
00:18:10
Por ejemplo, podemos hacer esto
00:18:12
Recorremos a partir del conjunto de claves
00:18:16
Es decir, yo tengo mi map
00:18:24
Alumnos
00:18:29
Mi map tiene un método que se llama keyset
00:18:30
¿Vale?
00:18:34
y key set me devuelve el conjunto de las claves.
00:18:35
Entonces, por ejemplo, vamos a suponer que yo guardo aquí mi conjunto de claves.
00:18:41
Vale, tengo aquí mi conjunto de claves.
00:18:56
Y ahora ya, esto ya es un conjunto sencillo.
00:18:59
Me puedo plantear recorrerlo, por ejemplo, así.
00:19:02
Y el valor, ¿cuál sería?
00:19:05
Alumnos.get key.
00:19:36
bueno, pues con esto estoy recorriendo
00:19:41
los dos elementos del map
00:19:46
tengo aquí mi conjunto de claves
00:19:48
recorro mis claves
00:19:50
y en cada iteración
00:19:51
en cada iteración tengo
00:19:53
la clave
00:19:56
y el valor
00:19:58
si quiero, a partir de esa clave
00:19:59
claro, con el get
00:20:02
entonces esto al ser un set
00:20:03
normal y corriente
00:20:11
lo puedo recorrer con un for each, con un iterador
00:20:12
pues como quiera
00:20:15
yo recorrer un set
00:20:17
Nunca con un for de índice, claro
00:20:18
Porque los conjuntos no tienen posición, no están ordenados
00:20:20
Bueno, pues esta es una posibilidad
00:20:23
Me saco el conjunto de las claves
00:20:25
Y ya con las claves
00:20:27
Puedo recorrerlas para ver lo que tiene
00:20:29
Lo que sea
00:20:31
Esta es una posibilidad
00:20:32
¿Vale?
00:20:34
Entonces, ¿que queremos solo los valores?
00:20:41
Pues por ejemplo
00:20:43
Yo que sé, solo los valores sin las claves
00:20:44
Pues hay
00:20:47
algún método por ahí que me saca los valores
00:20:48
alumnos
00:20:51
tiene un método
00:20:56
values que me saca
00:20:58
los valores
00:21:00
vale
00:21:01
en este caso
00:21:02
dime un segundito
00:21:05
vamos a ponerlo aquí
00:21:24
me devuelve una
00:21:29
una colección de los alumnos
00:21:30
vale
00:21:33
dime
00:21:33
No sé qué set te devuelve
00:21:45
Te devuelve un conjunto
00:21:58
No sé si te devuelve un conjunto
00:21:59
No sé qué tipo de conjunto es
00:22:02
Pero no nos importa
00:22:03
¿Vale?
00:22:06
Te devolverá, entiendo yo
00:22:08
Que en función de
00:22:10
Si es un HashMap
00:22:12
Te devolverá un hash set con las claves
00:22:14
Y si es un tree map
00:22:16
Te devolverá un tree set, supongo
00:22:17
Porque lo que hace el map
00:22:19
Es guardar esto en un set
00:22:21
Eso sí o sí
00:22:23
¿En qué set? Hash set si es hash map
00:22:24
Tree set si es tree map
00:22:28
Entonces entiendo que el set que te devuelve
00:22:29
Tiene esa
00:22:31
Ese también
00:22:32
El linked hash set
00:22:35
Que te devuelve un set con esa estructura
00:22:36
Directamente
00:22:39
Pero bueno, cual sea
00:22:40
A la hora nosotros de recorrerla es que nos da igual
00:22:43
En realidad, porque trabajamos
00:22:45
Con todos los set igual
00:22:47
Vale, entonces
00:22:48
Vale, que queremos solo los valores
00:22:52
Pues los podemos guardar aquí en una colección
00:23:06
Y como podemos recorrer
00:23:08
Cualquier colección
00:23:10
Iterando, vale
00:23:11
Pues entonces
00:23:13
Pero vamos, recorrer solo los valores sin claves es más raro
00:23:14
Pero bueno, no pasa nada
00:23:18
O sea, esto lo podemos hacer
00:23:19
Vale, punto
00:23:21
Iterando
00:23:29
entonces cualquier colección
00:23:30
me da igual lo que me haya devuelto esto
00:23:36
que no lo sé, no sé si me ha devuelto una lista
00:23:37
un set, no sé que me ha devuelto
00:23:39
pero me ha devuelto una colección
00:23:42
sea list o sea set
00:23:43
porque son las dos implementaciones de
00:23:46
collective, sea la que sea
00:23:47
se puede iterar con un iterador
00:23:50
vale
00:23:52
entonces yo ahora
00:23:53
pues bueno, podría hacer esto y ya está
00:23:55
bueno pues
00:23:57
con esto estaría mostrando
00:24:13
Solamente los valores
00:24:14
¿Vale? Otra posibilidad más
00:24:16
Otra cosa, uno ya juega con esto
00:24:18
Para hacer en la aplicación que sea lo que tenga que hacer
00:24:20
Con esto estaríamos mostrando
00:24:22
Solo los valores
00:24:24
¿Vale?
00:24:25
Sí, claro, efectivamente, también
00:24:31
Yo podría hacer un for each también, efectivamente
00:24:33
¿Vale?
00:24:36
En values, perdón
00:24:44
Cualquier colección es recorrible con un for each
00:24:45
Claro, también, efectivamente
00:24:50
el iterador pues tendría sentido
00:24:54
si yo quisiera modificar
00:24:58
esa colección dentro de
00:24:59
vale
00:25:01
pero luego a la hora de recorrer
00:25:07
hay otra estructura muy interesante
00:25:10
que es
00:25:13
una vista que nosotros podemos hacer
00:25:14
del map
00:25:17
que engloba las dos cosas en un único objeto
00:25:18
es decir, nuestro map
00:25:21
es esto
00:25:25
la complejidad que tiene es
00:25:26
que cada elemento son dos cosas
00:25:29
Eso es lo que nos ha complicado el recorrido
00:25:31
Que o bien hemos sacado las claves
00:25:34
Y hemos recorrido a través de las claves
00:25:35
Sacando el valor
00:25:37
O bien hemos sacado los valores
00:25:38
Y hemos recorrido los valores
00:25:40
A lo que nos ha complicado el recorrido
00:25:41
Es que cada elemento son dos cosas
00:25:42
Vale, pues esto se puede transformar
00:25:44
A una cosa
00:25:48
Que
00:25:51
Lo que está
00:25:52
Que envuelve en un único elemento cada par
00:25:54
¿Vale?
00:25:56
Cada par se mete en un único elemento
00:25:58
esta estructura
00:26:01
es como si fuera una envolvente
00:26:04
de esto, donde en cada
00:26:05
posición suya mete
00:26:07
las dos cosas, con lo cual se convierte
00:26:09
ya en una estructura de elementos únicos
00:26:11
aunque cada uno de ellos tiene dos cosas
00:26:13
en realidad, tiene dos partes
00:26:15
y esta estructura de elementos únicos
00:26:17
uno ya lo recorre como cualquier colección
00:26:19
con el for each, con el iterador, como quiera
00:26:21
bueno, pues
00:26:23
esta estructura es
00:26:25
es map entry, se llama
00:26:27
map entry, entonces map entry es como una especie
00:26:29
de envolvente del map
00:26:32
en realidad más que un envolvente
00:26:33
es como una vista
00:26:36
como una vista
00:26:36
de una tabla de bases de datos
00:26:39
aunque igual las vistas de las tablas y todo eso
00:26:41
todavía no las habéis visto, imaginaos
00:26:43
¿no?
00:26:45
vale, entonces una vista de cualquier
00:26:47
cosa en informática
00:26:49
una vista es
00:26:51
una forma amable
00:26:52
o transformada o tuneada
00:26:54
de acceder a esos datos
00:26:57
Uno en general cuando tiene unos datos
00:26:58
Esos datos
00:27:00
Como tienen que tener toda la información de su aplicación
00:27:03
Pueden ser muy complejos
00:27:05
Uno puede tener un modelo
00:27:06
De 200 tablas
00:27:09
Porque su aplicación
00:27:11
Necesita un montón de datos
00:27:13
Vale, entonces si mi aplicación
00:27:14
Tiene que estar todo el rato
00:27:17
Entreteniéndose, recorriendo
00:27:18
Esas 200 tablas
00:27:21
Buscando, sacando, etcétera
00:27:23
Pues se va a volver loca
00:27:24
Entonces, una vista es una especie de forma más amable, más sencilla de acceder a esas tablas
00:27:25
Es decir, es una recomposición de esas tablas para que sean más manejables
00:27:34
Por ejemplo, vosotros tenéis lógicamente vuestra base de datos de coches, ¿verdad?
00:27:38
Claro, pues, ¿qué tendrá? Yo que sé cuántas tablas tiene, pues unas cuantas, cinco, seis, no lo sé
00:27:47
entonces a lo mejor una parte de la aplicación
00:27:52
una parte de la aplicación
00:27:56
solamente trabaja con
00:27:57
marcas, porque está cambiando
00:27:59
marcas, actualizando marcas, una parte de la aplicación
00:28:02
solo trabaja con las marcas
00:28:04
entonces que necesidad le da a esa aplicación
00:28:05
hacerle visible
00:28:07
toda la tabla, porque le vamos a complicar
00:28:09
la vida, porque tiene que ir distinguiendo que tabla
00:28:11
le toca, etcétera, que necesidad
00:28:13
pues hacemos una cosa que se llama vista
00:28:15
entonces
00:28:17
esa vista es como una especie de subconjunto
00:28:19
de esa tablita pequeñito
00:28:22
solo para esa parte
00:28:23
de mi aplicación. Ese subconjunto
00:28:26
puede ser la tabla coches
00:28:28
solamente, porque eso es una vista
00:28:29
que es una especie de subconjunto
00:28:32
sencillito de mi base
00:28:34
de datos, una especie de subconjunto sencillito
00:28:36
que se quita todo lo que no usa
00:28:38
y se queda solo con una parte.
00:28:40
Y entonces, esta parte mía
00:28:43
de la aplicación usa esa vista.
00:28:44
Es la idea de lo que es una vista.
00:28:46
¿Realmente es una copia
00:28:49
de la base de datos? ¿Es una copia
00:28:50
de esa tabla en otro sitio, no
00:28:52
no es una copia, es una especie
00:28:54
de ventanita a eso
00:28:56
¿vale? esto es como
00:28:58
nosotros pues tenemos en este cuarto
00:28:59
lo de las vistas se usa mucho
00:29:02
con textos, pues tenemos aquí en este aula un montón
00:29:03
de mesas y una ventana
00:29:06
corrida única
00:29:08
entonces, el que viene a arreglar las mesas
00:29:08
pues entra por
00:29:12
esa ventana corrida única gigante
00:29:14
y ve todas las mesas
00:29:16
entonces tiene que buscar entre
00:29:17
todas a ver cuál arregla
00:29:20
¿Cómo podríamos organizar esto con vistas?
00:29:21
Pues en lugar de una ventana corrida gorda
00:29:26
Hacer un montón de ventanitas
00:29:28
Que serían las vistas
00:29:30
Ventana 1, ventana 2, ventana 3 por separado
00:29:31
La ventana 1 te lleva a la mesa 1
00:29:33
Y ya está
00:29:35
La ventana 2 o vista 2
00:29:36
Te lleva a la mesa 3 y 4
00:29:39
Entonces ahora
00:29:41
Que un arreglador de mesas
00:29:43
Solo va a trabajar con la mesa 1
00:29:45
Porque es la única que tiene asignada
00:29:48
entra a través de la ventana 1
00:29:49
y ya está.
00:29:52
Pues la ventana sería la vista,
00:29:53
que es ese acceso
00:29:55
que tiene hacia la única parte
00:29:57
de la base de datos que le interesa.
00:30:00
Entonces es mucho más sencillo
00:30:03
para el arreglador de mesas
00:30:04
entrar por la ventana que le corresponde,
00:30:05
que sería la vista,
00:30:08
porque lo único que va a ver
00:30:09
es la mesa que le toca,
00:30:10
no va a haber más,
00:30:11
entonces no tiene que elegir.
00:30:12
Entonces, a través de la vista
00:30:14
se accede al objeto real.
00:30:16
No es que hagamos una copia de las mesas y le decimos, oye, te hago una copia de la mesa 1 y tú trabajas con la copia.
00:30:18
¿Te hago una copia de la mesa 2 y 3? No, no, no.
00:30:24
El arreglador de mesas trabaja con la mesa real, pero ha entrado a través de un caminito especial para él,
00:30:27
de un camino especial para él que le ha hecho poder olvidarse de todo el resto de cosas.
00:30:33
Pues es una vista, ¿vale?
00:30:39
Bueno, pues el Map Entry es como si fuera una vista distinta del Map,
00:30:42
que es una vista en la cual
00:30:47
yo en lugar de ver los dos elementos
00:30:49
por separado, veo un único
00:30:52
elemento que los tiene dentro los dos
00:30:54
¿qué gano con eso?
00:30:56
pues que pueda hacer recorridos
00:30:58
como hago
00:31:00
con los list y los set, porque esto es una colección
00:31:02
de elementos únicos, gano eso
00:31:04
en realidad
00:31:06
entonces
00:31:06
pero lo que es importante es que entendamos
00:31:09
que es una vista, luego al ser
00:31:12
una vista, si yo hago modificaciones
00:31:14
aquí, las estoy haciendo
00:31:16
en el map original
00:31:18
porque esto no es que yo haga una copia
00:31:19
con los datos metiditos en objetos únicos
00:31:22
no hago una copia
00:31:24
hago una especie de ventanita
00:31:25
a través de la cual yo entro
00:31:28
a los dos, pero entro
00:31:30
mirándolos como si fuera
00:31:32
una estructura única, pero si yo modifico
00:31:34
aquí, modifico estos en realidad
00:31:36
es una vista, vale
00:31:38
bueno, pues como declaramos
00:31:39
el map entry este de aquí
00:31:42
mediante map
00:31:44
vale
00:31:51
entonces las vistas son estructurales
00:31:54
lo que pasa es que claro, en función del contexto
00:31:58
en el que uno esté, bases de datos, programación
00:32:00
administración de sistemas
00:32:02
lo que sea, pues lógicamente
00:32:04
se concretan de una manera o de otra
00:32:05
pero la vista es un elemento básico
00:32:07
en informática, vale
00:32:10
que es, te voy a
00:32:11
mostrar esto a mi manera
00:32:13
para facilitarte el acceso
00:32:15
Lo voy a mostrar de una manera modificada
00:32:18
Bueno, pues el map entry
00:32:20
El map entry
00:32:22
Este
00:32:24
¿Cómo obtenemos esa colección
00:32:26
De map entries?
00:32:29
Pues en mi colección alumnos
00:32:30
Uy, a que la escribo yo aquí
00:32:31
Tenemos un método
00:32:33
Que es el entry set
00:32:38
¿Vale?
00:32:40
Entonces, el entry set
00:32:41
Nos devuelve
00:32:46
Una colección única
00:32:47
Que va a ser un conjunto
00:32:49
Y este conjunto
00:32:51
¿De qué va a ser?
00:32:58
De elementos map entry, de esos que os he dicho
00:33:00
De elementos map entry
00:33:02
Que cada uno de ellos es
00:33:07
De string
00:33:08
Y alumno, en este caso
00:33:09
Vale, esta es mi vista
00:33:12
Mi vista es un único conjunto, colección única
00:33:23
¿De qué?
00:33:26
De un montón de elementos de esta clase
00:33:27
Y cada uno de estos elementos
00:33:29
Tiene dentro
00:33:32
Ahora ya, la clave por un lado
00:33:33
Y el valor por otro
00:33:36
vale
00:33:37
entonces, esta ya la podemos recorrer
00:33:40
como recorreríamos cualquier colección
00:33:43
sacando un iterador con un for each
00:33:45
como recorreríamos cualquier set
00:33:47
por ejemplo, si la recorremos con un for each
00:33:48
pues para cada elemento
00:33:51
de estos, para cada elemento
00:33:53
de estos, que envuelve
00:33:55
un par dentro
00:33:57
de mi vista
00:34:02
pues yo ahora aquí, este tiene
00:34:02
dentro, tanto la clave
00:34:08
que la saco con get key
00:34:10
Como el valor
00:34:13
Que lo puedo sacar con getValue
00:34:16
¿Vale? Entonces
00:34:21
Este objeto es de esta clase
00:34:32
Que me envuelve
00:34:34
A los otros dos
00:34:36
Y los puedo sacar de ese envoltorio
00:34:37
Con getKey la clave, getValue el valor
00:34:40
Lo que yo necesite sacar
00:34:42
¿Vale?
00:34:44
Y la colección de estos
00:34:46
Elementos únicos
00:34:48
La obtengo con el método entrySet
00:34:49
Y ya está
00:34:52
vale, pues vamos a parar aquí
00:34:53
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 3
- Fecha:
- 9 de marzo de 2026 - 10:09
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 35′ 02″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 143.60 MBytes