20260303 Map_1 - 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:
Venga, dale
00:00:00
Vale
00:00:02
Pues hemos visto
00:00:04
Cómo guardar
00:00:06
Un montón de cosas a mogollón
00:00:07
Muy bien
00:00:09
En unas listitas
00:00:11
Y en unos conjuntos
00:00:13
¿Vale?
00:00:17
Si necesitamos orden
00:00:20
Una lista mejor
00:00:21
Pero bueno, un poquito más de computación
00:00:22
A la hora
00:00:26
De hacer los accesos
00:00:27
Las búsquedas
00:00:30
pero bueno, eso es un problema de la CPU
00:00:31
no tanto, no es nuestro
00:00:33
o si no necesitamos orden, pues un conjunto
00:00:34
ahí todo a mogollón y ya está
00:00:36
bueno, esto ya lo tenemos dominado y controlado
00:00:38
¿vale?
00:00:41
en la vida real
00:00:44
en la vida real hay otra
00:00:45
estructura que realmente
00:00:47
facilita muchísimo las cosas
00:00:49
que es
00:00:51
la estructura del diccionario de toda
00:00:53
la vida, ¿verdad?
00:00:55
es decir, si nosotros tuviéramos
00:00:57
todos los significados
00:00:59
de todo lo que existe
00:01:01
metidos en un conjunto
00:01:02
y tuviéramos que encontrar
00:01:04
el significado mesa
00:01:06
pues ostras
00:01:08
buscar ahí en el conjunto
00:01:10
todos los significados
00:01:13
del lenguaje español
00:01:15
hasta que encontremos el significado
00:01:17
que se adapta al concepto de mesa
00:01:18
sería una locura
00:01:20
¿vale?
00:01:22
¿pero qué hace un diccionario?
00:01:23
un diccionario asocia
00:01:25
cada significado
00:01:28
a una palabra clave
00:01:29
que es el término que tiene asociado
00:01:32
lo asocia a una palabra clave
00:01:34
y luego además
00:01:36
al implementar un orden
00:01:38
pero eso ya es secundario
00:01:40
al implementar un orden
00:01:41
pues nos falta la búsqueda
00:01:42
entonces si tú quieres saber
00:01:44
qué es una mesa
00:01:46
vas directamente clave
00:01:46
la clave mía de búsqueda
00:01:49
que es lo que yo quiero
00:01:50
la mesa
00:01:51
vale pues busco por esa clave
00:01:52
y por esa clave ya puedo encontrar
00:01:54
de todo
00:01:56
me encuentro su significado
00:01:57
los sinónimos, todo lo que quiero
00:01:58
lo encuentro ahí todo
00:02:00
pero todo eso que me pueda encontrar
00:02:01
significado, sinónimos, antónimos
00:02:03
traducción al hebreo, todo
00:02:06
lo tengo ahí
00:02:08
asociado a una única clave, que es mesa
00:02:09
¿qué ahora quiero eso mismo
00:02:12
pero con silla?
00:02:14
pues yo con mi clave silla me voy
00:02:16
a esa estructura de diccionario
00:02:18
y a través
00:02:20
de esa clave silla encuentro
00:02:22
todo lo que está asociado a esa clave
00:02:24
lo que es una silla
00:02:26
sus sinónimos, sus antónimos
00:02:28
pues como se dice en arameo, etcétera
00:02:30
todo lo que yo quiera
00:02:32
¿vale? entonces una estructura habitual
00:02:33
¿vale? que los objetos que nosotros manejamos
00:02:35
tengan un montón de cosas
00:02:39
pues alumno tiene un montón de cosas
00:02:40
factura tiene un montón de cosas
00:02:43
y yo a ese montón de cosas
00:02:45
le asocio una clave
00:02:47
que lo identifica de forma única
00:02:49
¿vale? esa es la idea del diccionario
00:02:51
asociar a cada uno
00:02:53
de mis objetos
00:02:55
Una clave sencillita
00:02:56
Que lo identifique de forma única
00:02:58
Entonces si cada uno de mis objetos
00:03:00
Tiene asociado una clave sencillita
00:03:02
Que lo identifica de forma única
00:03:04
A través de esa clave
00:03:05
Va a ser más fácil acceder
00:03:07
Para eliminar, para recuperar
00:03:10
Lo que sea
00:03:12
Por ejemplo yo en mi set
00:03:13
Yo aquí
00:03:15
Pues tendré, tengo aquí un montón de
00:03:16
Por ejemplo tengo aquí pues eso
00:03:20
Tengo aquí
00:03:22
Un montón de alumnos
00:03:23
con un montón de cosas
00:03:25
esos alumnos
00:03:30
entonces
00:03:31
si yo quiero encontrar
00:03:33
al alumno que cumpla no sé qué condición
00:03:35
con nombre tal, pues me tengo que meter en el conjunto
00:03:38
e ir uno por uno
00:03:40
me voy a ir en el conjunto, voy sacando el conjunto
00:03:41
este no es, este no es, este no es
00:03:43
hasta que encuentro al alumno
00:03:45
pero bueno, es una tarea un poco pesada
00:03:46
¿vale?
00:03:49
entonces, estrategia de programación
00:03:50
práctica
00:03:52
a cada alumno
00:03:53
asociarle una clave
00:03:55
a cada alumno le asocio una clave
00:03:59
que tiene que ser algo que lo identifique de forma única
00:04:02
no puede haber dos objetos con la misma clave
00:04:05
pues en el caso de alumnos
00:04:08
uno podría pensar en el NIF
00:04:10
entonces cada objeto
00:04:13
que uno de mis alumnos tiene asociada su clave
00:04:18
y ahora ya las búsquedas
00:04:20
por NIF, son mucho más sencillas
00:04:24
yo miro exclusivamente
00:04:26
esto
00:04:28
y digo, ah, este
00:04:29
pues ya está, me saco todo esto
00:04:32
no tengo que meterme en la caja mogollón
00:04:34
hasta que lo encuentro
00:04:36
¿vale? que quiero eliminar por NIF
00:04:38
¿vale? pues entonces
00:04:40
ah, es este, fuera
00:04:42
yo tiro de la clave, tiro de la clave
00:04:44
porque buscar en la
00:04:46
en la caja de claves es más fácil
00:04:48
tiro de la clave a este
00:04:50
fuera
00:04:52
¿vale? no tengo que ir sacándolos
00:04:53
ahí, hasta que encuentro el de eliminar
00:04:56
y eliminarlo
00:04:58
esa es la idea del diccionario
00:04:59
llamado en Java
00:05:01
el map
00:05:04
¿vale? map pues porque
00:05:05
mapea una clave
00:05:08
a todo su contenido, que puede ser una cosa
00:05:09
enorme, están cosas
00:05:12
entonces, en realidad un map vale
00:05:12
para guardar cosas, lo que pasa es que
00:05:16
no hereda de collection en realidad
00:05:17
si miráis la estructura
00:05:19
de jerarquía de collection
00:05:21
pues no hereda
00:05:23
de collection, map es una
00:05:25
interfaz por sí misma
00:05:27
que luego tiene varias implementaciones
00:05:29
el hash map, el link
00:05:31
el hash map, el tree map
00:05:33
tiene varias implementaciones
00:05:34
¿no es lo mismo que crisis?
00:05:36
no
00:05:39
y ahora lo vas a ver
00:05:40
entonces esta es la idea, la idea es
00:05:42
asociar a cada objeto
00:05:45
una clave única
00:05:47
¿vale? entonces si cada objeto tiene asociado
00:05:48
una clave única, ahora a partir
00:05:51
de esa clave, va a ser mucho más sencillo.
00:05:53
Las modificaciones,
00:05:56
las consultas
00:05:58
por clave
00:05:59
y las eliminaciones.
00:06:01
Esa es la idea, que yo no tenga que iterar
00:06:03
para localizar ni para nada.
00:06:05
¿Tú no tienes el map
00:06:07
en proceso, solo las claves?
00:06:09
No, ahora vamos a ver,
00:06:11
la idea es esta. Vale, ahora vamos a ver cómo se
00:06:12
implementa, cómo se
00:06:14
se implementa esto.
00:06:16
Vale, pues
00:06:19
vale, pues el map
00:06:20
es una caja de pares
00:06:23
un map es esto
00:06:25
un map es una caja de pares
00:06:27
no como una lista
00:06:30
una lista era una caja de objetos sin más
00:06:33
y un set también
00:06:38
un set era una caja de objetos sin más
00:06:40
ahí estaban todos los objetos
00:06:44
aquí con orden y ahí sin orden
00:06:45
pero bueno, eran una caja de objetos
00:06:47
un map es una caja de pares
00:06:49
Cada elemento del map es un par, son dos cosas.
00:06:52
Cada elemento del map son dos cosas, ¿vale?
00:06:56
El primer elemento del map es el que se llama clave.
00:06:59
Y el segundo es el que se llama valor.
00:07:04
¿Vale? Pues eso es lo que tiene el map.
00:07:08
Un conjunto de pares, una caja con muchos pares.
00:07:10
Y cada par va indisolublemente unido a su clave con su valor.
00:07:13
¿Vale?
00:07:18
pues esto es un map
00:07:18
clave, valor, clave, valor
00:07:21
entonces
00:07:26
el valor en sí que es
00:07:28
pues el objeto gordo, el dato que yo quiero guardar
00:07:30
el valor en sí
00:07:33
sería lo que yo
00:07:34
en realidad guardo en la lista
00:07:37
es la idea
00:07:38
el objeto gordo, el dato
00:07:40
el alumno entero, lo que yo quiera
00:07:42
y la clave
00:07:44
que está afuera
00:07:46
es aquello
00:07:47
que lo identifica de forma única
00:07:51
un if, un entero
00:07:53
lo que sea
00:07:55
entonces las claves
00:07:56
obligatoriamente
00:08:01
tienen que ser
00:08:02
únicas, si yo intento
00:08:04
meter en un map un par
00:08:06
porque en el map siempre que meta algo
00:08:08
tiene que ser un par, clave, valor
00:08:10
clave, valor, no puedo meter un valor suelto
00:08:12
o una clave suelta, no
00:08:14
clave, valor, bueno puedo meter una clave
00:08:16
asociada a un null, puedo
00:08:18
¿vale? pero no puedo
00:08:20
meter una clave null, la clave null no
00:08:22
entonces pues siempre que meta
00:08:24
en un map un par
00:08:26
las dos cosas obligatorias
00:08:27
la clave tiene que ser única
00:08:30
para que me deje meterlo
00:08:32
si trato de meter
00:08:34
un par donde la clave está repetida
00:08:36
no inserta un par
00:08:39
nuevo, lo que hace es
00:08:41
modificar el valor del que ya hay
00:08:42
ahora lo probamos con tres o cuatro ejemplitos
00:08:45
sencillos, ¿vale?
00:08:47
simplemente esto es para ver en general
00:08:48
de que va, nada más
00:08:50
vale
00:08:51
entonces
00:08:53
los valores
00:08:54
sí pueden estar repetidos
00:08:57
es decir, puede haber dos claves
00:09:00
que tengan asociados aquí
00:09:02
dos objetos iguales, el mismo
00:09:03
objeto, incluso con la
00:09:06
misma dirección de memoria, eso no es problema
00:09:08
los valores pueden estar repetidos
00:09:10
lo único que importa es que las claves no lo estén
00:09:12
vale, en un diccionario normal
00:09:14
dos palabras
00:09:16
Pueden tener el mismo significado idéntico
00:09:18
Pero son dos claves distintas
00:09:20
Hembra, mujer, me da igual
00:09:22
No has dicho que la clave
00:09:24
Es la clave primaria
00:09:27
La clave lo tiene que identificar
00:09:29
De forma única
00:09:31
Pero son dos cosas distintas
00:09:32
Tú dijiste que por un lado
00:09:34
Hay que tener una clave
00:09:37
Y por otro lado el valor
00:09:38
Cuando tú guardas en un map
00:09:40
Aquí ya no es tan importante
00:09:42
Que esté la clave
00:09:44
porque esa clave la tienes aquí
00:09:46
fuera, tú puedes hacer el diseño
00:09:48
que quieras en realidad
00:09:50
¿vale? entonces si tú vas a
00:09:51
tú has diseñado tu aplicación
00:09:54
para que los alumnos estén en un map
00:09:55
el objeto alumno, la clase alumno
00:09:58
no tiene por qué tener un NIF
00:10:00
porque ese NIF ya está
00:10:01
en la clave del map
00:10:03
¿vale? pero eso sí, si luego
00:10:05
esos objetos alumnos los usas en otras
00:10:10
colecciones, si no tiene una propiedad
00:10:12
clave primaria, pues ahí sí que sería
00:10:14
complejo, pero si solo lo usas en un map
00:10:16
no hay problema, porque esto ya hace
00:10:18
como clave
00:10:20
entonces esta estructura de aquí
00:10:20
ahora ya hace
00:10:24
que todo sea mucho más sencillo
00:10:26
es mucho más sencillo
00:10:28
manejar conjuntos de
00:10:30
alumnos, de facturas, de no sé qué, si están en
00:10:32
un map, que si están en una colección
00:10:34
sin clave asociada
00:10:36
¿vale? vamos a ver
00:10:37
cómo se
00:10:40
se usaría
00:10:41
Venga, pues a ver
00:10:44
Pues venga, ejemplo más
00:11:04
Vamos a hacer
00:11:11
Vale, pues por ejemplo, vamos a suponer que yo tengo
00:11:12
Pues ala, alumnos
00:11:51
A ver, espera, que no he hecho ningún paquete
00:11:53
Y eso, eso es muy peligroso
00:11:57
Pues yo que sé
00:12:01
Modelo, pues venga
00:12:03
Voy a trabajar con alumnos
00:12:05
venga, propiedades, nombre y nota
00:12:08
con get y set
00:12:18
lo ideal sería pues un constructor
00:12:41
un toString, un equals
00:12:42
lo de siempre, pero bueno ahorramos tiempo
00:12:44
vale, si yo fuera a usar
00:12:46
esto con list o con set
00:12:52
aquí pues de nuevo tendría
00:12:54
que plantearme, vamos a ver
00:12:56
en un list cuando tú quieras
00:12:57
cuál es tu criterio de igualdad
00:13:00
o en un set
00:13:02
cuál es tu criterio de igualdad
00:13:04
para cuando quieras borrar un alumno, localizarlo
00:13:05
pues habría que decidirlo
00:13:08
dentro de los parámetros que tenemos
00:13:10
habría que decidirlo
00:13:12
el nombre, vale, pero entonces
00:13:13
cuidado que tu aplicación no va a permitir
00:13:16
alumnos con el mismo nombre
00:13:18
¿es un problema?
00:13:20
no, no es un problema
00:13:23
es imposible que dos alumnos se llamen igual
00:13:24
imposible, pues no es un problema, tiro
00:13:26
y ya está
00:13:28
cuidado que tu aplicación sí puede ser
00:13:29
que tú tengas alumnos que se llamen igual
00:13:32
cuidado, venga pues añade
00:13:34
un if que los identifique
00:13:36
haces un equals por nif y ahora ya no tienes
00:13:37
problemas con tus list o tus set para hacer
00:13:40
remove, etcétera. Bueno, estas son
00:13:42
las consideraciones que hemos hecho hasta ahora.
00:13:44
¿Vale?
00:13:46
Bueno, aquí, aunque sería, aún así,
00:13:47
sería feo
00:13:49
dejarlo así, sin clave
00:13:50
primaria, aunque sería feo.
00:13:53
Vamos a decidir
00:13:56
por cuestiones de diseño que vamos
00:13:58
a trabajar en un map.
00:13:59
¿Vale? Pues si trabajamos en un map,
00:14:01
el nif, que es lo que lo identifica
00:14:04
de forma única, puede ser la clave.
00:14:06
Del map, con lo cual no tengo que meterlo aquí.
00:14:07
Venga, vamos a hacernos ahora nuestra aplicación.
00:14:10
Ahora ya sí, nuestra aplicación que trabaja con estos alumnos.
00:14:15
Venga, pues nuestra aplicación con el método main, este de aquí.
00:14:22
Vale, datos de mi aplicación.
00:14:33
Un map de alumnos.
00:14:36
vale, si yo quiero un map
00:14:39
el map necesita
00:14:42
dos tipos
00:14:44
el tipo
00:14:46
al que pertenece la clave
00:14:48
y el tipo al que pertenece el valor
00:14:50
no, no la he puesto
00:14:52
vale
00:14:59
vale, pues entonces
00:15:01
yo voy a usar mis alumnos en un map
00:15:03
bueno, pues entonces me voy a declarar
00:15:04
aquí van a estar mis datos, mis alumnos
00:15:07
vale, el map
00:15:09
necesita dos tipos
00:15:13
de datos
00:15:16
para instanciarse, el primero
00:15:16
es el tipo al que pertenece la clave
00:15:20
y el segundo
00:15:22
el tipo al que pertenece el valor
00:15:23
el tipo al que pertenece el valor
00:15:25
en este caso está claro, van a ser alumnos
00:15:28
y ahora
00:15:29
la clave, que va a
00:15:31
identificar de forma única
00:15:34
a cada alumno
00:15:35
a cada alumno lo va a identificar
00:15:36
de forma única
00:15:39
su NIF, por ejemplo
00:15:41
el NIF es una cadena
00:15:43
pues entonces string
00:15:45
tranquilos
00:15:47
que prisas
00:15:56
vale, con esto yo he dicho
00:15:58
mi estructura de datos
00:16:00
va a ser un par
00:16:02
un montón de pares
00:16:04
donde cada par tendrá en la clave
00:16:06
el NIF del alumno
00:16:08
y en el valor el propio
00:16:09
objeto alumno
00:16:12
Está declarado, pero bueno, vamos a instanciarlo
00:16:13
Map es la interfaz
00:16:16
Tiene varias
00:16:21
Posibles implementaciones
00:16:23
Map
00:16:25
Tiene HashMap
00:16:26
LinkedHashMap y Tremap
00:16:28
Entonces
00:16:31
Como veis
00:16:32
Casan perfectamente con HashSet, LinkedHashSet
00:16:34
Y Treset
00:16:37
¿Por qué?
00:16:38
LinkedHashSet
00:16:44
dijimos que es igual a todos los efectos
00:16:44
que HashSet, pero
00:16:46
conserva el orden de inserción.
00:16:48
Con lo cual, si tú en un
00:16:51
LinkedHashSet iteras,
00:16:52
te va a salir por el mismo orden
00:16:54
en que lo insertaste.
00:16:56
Que el HashSet no.
00:16:58
¿Vale? Pues el HashMap
00:17:00
es una posible implementación
00:17:05
la más
00:17:06
habitual.
00:17:08
El HashMap significa
00:17:13
las claves
00:17:15
se guardan en un HashSet.
00:17:17
Es lo único que significa
00:17:18
Las claves
00:17:20
¿Vale?
00:17:33
Guarda las claves en un hash set
00:17:35
Entonces
00:17:37
Eso automáticamente nos lleva a cuidadín
00:17:38
String que tenga hasco de equals
00:17:43
Ah, lo tiene, no hay problema
00:17:45
Lo tiene porque string, la clase string ya está hecha
00:17:46
Tiene hasco de equals
00:17:49
Pero bueno, vamos a ver cómo se usaría
00:17:50
Vale, vamos a empezar a introducir
00:17:55
Alumnos, ¿vale? Vamos a meter
00:17:57
Un primer alumno
00:17:59
Alumnos, aquí no es add
00:18:00
Para insertar en un diccionario o map
00:18:03
Es put
00:18:06
¿Vale?
00:18:08
Y hay que meter dos cosas, efectivamente
00:18:10
Hay que meter la clave del alumno
00:18:13
Y el alumno
00:18:16
Me voy a hacer un constructor con parámetros
00:18:18
Para poder meterlo aquí directamente
00:18:25
¿Vale?
00:18:28
Cada inserción en el map
00:18:36
Implica insertar dos cosas
00:18:38
la clave y el valor
00:18:40
vale, entonces yo aquí me he insertado
00:18:43
ahora ya mi map tiene dos cosas
00:18:46
vamos a verlo
00:18:48
num
00:18:52
tiene dos cosas pero un solo elemento, claro
00:18:58
num alumnos
00:19:01
alumnos.size
00:19:02
el size lo tiene, que es la cantidad de pares que tiene
00:19:04
si ejecutamos esto
00:19:07
uy
00:19:09
main
00:19:14
vale, pues un alumno he metido
00:19:17
con los dos valores
00:19:26
Vale, voy a meter otro
00:19:27
Ahora le ponemos valores
00:19:33
O lo que sea
00:19:38
Si yo intento hacer esto
00:19:39
Esto no lo va a hacer
00:19:43
No va a meter otro elemento
00:19:48
No va a meter otro
00:19:50
Porque la clave ya existe
00:19:51
Pueden insertar
00:19:53
Claves
00:20:02
Repetidas
00:20:04
No se pueden
00:20:05
Si volvemos a ejecutar esto
00:20:07
Pues efectivamente
00:20:09
uno y uno
00:20:11
no se pueden insertar claves repetidas
00:20:14
está claro, ¿vale?
00:20:18
no te dice nada, simplemente no inserta
00:20:20
porque ya existe uno con esta clave
00:20:22
lo que acabamos de hacer
00:20:24
no te dice nada, simplemente no te lo inserta
00:20:29
vale, entonces
00:20:33
ahora, ¿cuál es la ventaja
00:20:36
de esto? que yo ahora
00:20:37
si quiero el alumno
00:20:40
de NIF, el que sea
00:20:42
Lo obtengo directamente a la primera
00:20:43
En una lista no, en una lista tenía que recorrerla
00:20:45
Hasta encontrar el alumno con ese NIF
00:20:48
¿Vale? Aquí no
00:20:50
Por ejemplo, voy a meter otro con otro NIF
00:20:52
5, 6, 7, 8
00:20:54
Tengo otro alumno
00:21:02
Este ya sí lo va a meter
00:21:04
Si yo hago aquí el system out
00:21:06
Este tercer put ya sí que sí
00:21:10
Este ya sí
00:21:14
Vale
00:21:15
vale
00:21:16
lo sustituye, en este caso
00:21:17
te crea este otro alumno nuevo vacío
00:21:24
lo sustituye
00:21:27
vale
00:21:28
entonces
00:21:30
ahora, ¿qué ventaja tiene esto?
00:21:32
yo quiero al alumno
00:21:35
de NIF 5678
00:21:36
para hacer algo con él
00:21:39
para ponerle por ejemplo una nota
00:21:40
pues ¿cómo saco yo
00:21:43
el alumno por clave?
00:21:45
pues muy sencillo
00:21:52
alumnos.get
00:21:53
y la clave que yo quiera.
00:21:58
5, 6, 7, 8.
00:22:00
¡Hala!
00:22:02
Ya tengo el alumno asociado a esta clave.
00:22:03
Ya lo tengo.
00:22:06
Y yo aquí ya le pongo el nombre que me dé la gana.
00:22:08
¿Esta primera clave no es una propiedad del alumno?
00:22:29
No.
00:22:32
No es una propiedad del alumno.
00:22:33
Es un dato del alumno,
00:22:35
pero lo tienes tú en el map
00:22:36
sacado, o sea, no lo tienes dentro de la clave
00:22:38
claro
00:22:40
este puede ser
00:22:43
este podría ser un diseño
00:22:46
¿vale? pero
00:22:48
ahora volvemos con eso
00:22:50
¿vale? este podría ser un diseño y toda la aplicación
00:22:52
podría tirar así
00:22:54
¿vale? entonces, ahora
00:22:55
luego habría que volver con eso, pero
00:22:58
entonces, esta es la principal
00:23:00
ventaja, ¿qué ocurriría
00:23:02
si yo hubiera decidido un diseño
00:23:04
en el cual mis alumnos van a una lista?
00:23:06
Pues si yo decido mi diseño
00:23:11
con un modelo que mis alumnos vayan a una lista,
00:23:13
tendría que meter, entonces, ahora ya sí,
00:23:17
el NIF aquí dentro, ¿vale?
00:23:20
O sea, imaginaos una aplicación
00:23:24
que es para ponerle nombres y notas a alumnos,
00:23:25
donde los alumnos se caracterizan por su NIF.
00:23:28
Yo decido hacerla como me dé la gana, ¿vale?
00:23:31
una posible decisión
00:23:34
mis alumnos van a un map
00:23:36
la clave el nif
00:23:37
y en el alumno por tanto ya no es obligatorio
00:23:39
que ponga el nif, no es obligatorio
00:23:42
entonces yo ya tiro así
00:23:44
cada vez que meta el alumno le meto con su nif
00:23:46
porque el alumno siempre va a llevar su clave
00:23:48
asociada, van en par
00:23:50
todo el rato, van en par, en un map van en par
00:23:52
la va a llevar asociada
00:23:54
con lo cual el alumno nunca va a perder su nif
00:23:56
no hace falta que esté aquí dentro
00:23:57
¿vale? pero porque
00:23:59
mis datos están solo en ese map
00:24:02
están solo en ese map, no hay problema
00:24:05
puedo tirar así con la aplicación, tranquilamente
00:24:07
ventaja que me he encontrado
00:24:09
que para buscar un alumno por
00:24:11
NIF, tengo el GET, facilísimo
00:24:13
si yo hiciera
00:24:15
esto con una lista
00:24:17
si yo hiciera esto con una lista
00:24:18
aquí no hay pares
00:24:21
clave valor, luego el NIF
00:24:23
tendría que ir en el alumno, por ejemplo
00:24:25
me voy a hacer el modelo 2
00:24:27
donde el alumno si tiene el NIF
00:24:28
me voy a hacer aquí el package
00:24:30
modelo 2
00:24:33
y voy a hacer mi alumno
00:24:35
¿vale?
00:24:39
a ver
00:24:45
repito
00:24:45
cuanto más tenga que repetir más tarde no vamos a ir
00:24:47
así que enteraos a la primera
00:24:50
porque si no
00:24:52
repito, vale
00:24:53
aplicación que tiene que trabajar con
00:24:56
alumnos que se caracterizan por
00:24:58
nombre nota y sunif
00:25:00
yo sé que es único
00:25:01
y lo que voy a hacer con la aplicación es ponerles
00:25:03
notas y nombres y luego recorrerlos
00:25:06
lo que yo quiera, vale
00:25:08
modelos posibles, diseños posibles
00:25:09
tropecientos mil
00:25:12
uno posible, mira
00:25:13
mis datos van a ir a un map
00:25:16
luego en mi clase
00:25:18
alumno, como en el map
00:25:20
va siempre clave, valor
00:25:22
clave, valor, la clave
00:25:24
que sea el nif, con lo cual
00:25:26
en alumno no hace falta que vaya al nif
00:25:28
como el alumno, el objeto alumno
00:25:30
con su nombre y nota, va a ir siempre pegadito
00:25:32
a la clave, siempre pegadito
00:25:34
pues no va a perder su clave nunca, ahí va
00:25:36
en el mapa, vale, pues con ese diseño
00:25:38
ya tiro, me hago mi alumno así
00:25:40
en mi main me hago yo mi map
00:25:42
de string
00:25:44
que es el nif, alumno que es el valor
00:25:46
y aquí ya meto los alumnos
00:25:48
los recupero por clave, etc
00:25:50
vale, hasta ahí está claro
00:25:52
diseño 2, no voy a usar
00:25:53
un map, diseño 2, para que veamos
00:25:57
la ventaja de usar un map
00:26:00
diseño dos, no, no voy a usar un más, mis alumnos todos a una lista
00:26:01
pues entonces
00:26:04
como los alumnos se caracterizan por tres cosas
00:26:05
NIF, nombre y nota
00:26:08
y van a la lista
00:26:10
donde no hay claves, ni hay nada
00:26:11
mi alumno tiene que tener la nota
00:26:12
perdón, el NIF, por eso estoy haciendo
00:26:15
esa otra versión, modelo dos
00:26:17
pues en mi versión modelo dos
00:26:19
mi alumno tendría que tener el NIF
00:26:21
porque va a ir a una lista y la lista
00:26:23
ni tiene claves, ni tiene nada
00:26:25
vale, pues le pongo el NIF
00:26:27
Y le añado aquí su getty set
00:26:30
Vale
00:26:32
Me voy a hacer ahora el main con este modelo
00:26:37
En mi paquete main2
00:26:40
Para que quede claro en el proyecto
00:26:42
Main2
00:26:44
Me hago el main con este modelo
00:26:47
Y me hago yo ahora
00:26:49
Mi clase main
00:26:51
Y me sale más complicada
00:26:53
Vale
00:26:57
Mi clase main que ahora no va a trabajar con un map
00:26:59
De map nada
00:27:03
Va a trabajar con una lista
00:27:03
Por ejemplo, lista de alumnos
00:27:07
newArrayList, por ejemplo
00:27:09
ala, modelo2
00:27:12
lista de alumnos, el alumno tiene dentro su
00:27:17
if, ahora
00:27:19
para añadir
00:27:21
pues nada, yo añado
00:27:22
ya sabemos como
00:27:25
pues bueno, alumno
00:27:27
a igual a, como no me he
00:27:29
hecho constructor con
00:27:31
parámetros, pues me lo va a hacer
00:27:33
apunto, pues
00:27:35
cuidado
00:27:39
que es modelo2
00:27:43
vale, pues apunto
00:27:44
setNif
00:27:49
igual a 1, 2, 3, 4
00:27:50
vale
00:27:52
el nombre me da lo mismo
00:27:55
y ahora
00:27:57
yo aquí haría, pues venga
00:27:59
a mis alumnos
00:28:00
le añado mi alumno a
00:28:01
estoy trabajando con una lista como siempre
00:28:04
vale
00:28:07
todo esto que tengo aquí lo quito
00:28:08
vale, imaginaos
00:28:10
que he añadido unos cuantos más
00:28:13
vale, entonces ahora
00:28:15
yo quiero encontrar
00:28:18
al alumno 1, 2, 3 y 4
00:28:20
con clave 1, 2, 3 y 4
00:28:22
con nif, perdón, para darle una nota
00:28:24
aquí en el caso de la lista
00:28:26
pues se me complica
00:28:28
porque tengo que recorrerla
00:28:30
y tengo que recorrerla y hacer
00:28:32
para cada alumno a
00:28:34
en alumnos
00:28:37
pues ahora ya sí
00:28:39
si a.get
00:28:40
nif
00:28:43
resulta que es igual
00:28:44
al 1, 2, 3, 4
00:28:46
o al que sea que yo esté buscando
00:28:48
o al que sea que yo esté buscando
00:28:50
¡Ah! Ya lo he encontrado.
00:28:53
Entonces ahora ya ponle la nota
00:28:55
o ponle lo que quieras.
00:28:56
Venga, un 7.
00:28:58
¿Vale? Luego, si tenemos
00:29:00
una lista y yo quiero encontrar
00:29:05
al alumno con un NIF en particular
00:29:07
para
00:29:09
hacerle algo, tengo que recorrer
00:29:11
la lista. Tengo que recorrerla.
00:29:13
O tirar del
00:29:16
Index of, que es una línea muy larga,
00:29:17
un alumno index of igual a esto,
00:29:20
y ahora ya con esta posición,
00:29:22
vete a la lista y sácamelo por esta posición,
00:29:24
ese chorizo que pusimos.
00:29:26
En cualquier caso es más complicado.
00:29:28
¿Vale?
00:29:30
Para encontrar en la lista el alumno
00:29:30
cuya clave primaria es una,
00:29:33
tengo que recorrerla.
00:29:35
Tengo que recorrerla.
00:29:36
O yo o el index of,
00:29:37
pero la tengo que recorrer.
00:29:38
¿Vale?
00:29:41
Con la estructura de mapa que he hecho,
00:29:41
me he ahorrado este recorrido.
00:29:44
con la estructura de mapa me he ahorrado esto
00:29:45
con la estructura de mapa
00:29:48
que yo quiero el 1, 2, 3, 4
00:29:50
get 1, 2, 3, 4
00:29:52
que quiero el 5, 6, 7, 8
00:29:53
get 5, 6, 7, 8
00:29:55
recupero por clave automáticamente
00:29:57
y ya con ese alumno recuperado
00:29:59
hago lo que quiera hacer
00:30:01
¿vale?
00:30:03
esa es la ventaja
00:30:06
la motivación de usar un map
00:30:08
en lugar de un conjunto
00:30:10
el tenerlos identificados por una clave
00:30:11
y ya lo recupero sin tener que iterar
00:30:14
hasta encontrarlo
00:30:16
¿vale? esa es la ventaja
00:30:17
entonces, ¿significa
00:30:20
eso que yo si trabajo con un map
00:30:31
ya en mi alumno
00:30:33
¿para qué ponerle el nif ahí
00:30:35
si total ya está
00:30:37
en la clave? hombre, aún así
00:30:40
es recomendable ponerle aquí también
00:30:42
y me diríais
00:30:44
la información la tengo duplicada
00:30:45
no pasa nada
00:30:47
porque tenerla en la clave
00:30:48
es para facilitarte los borrados
00:30:52
y las recuperaciones
00:30:53
pero está muy bien que el objeto lo tenga todo dentro
00:30:54
lo que pasa es que tú además
00:30:57
lo extraes, lo duplicas en una clave
00:30:59
para facilitar el recuperar
00:31:01
y el borrar y todo eso que veremos luego
00:31:03
lo de duplicarlo
00:31:05
es para facilitarte los accesos
00:31:08
entonces repito, aún así
00:31:10
aunque en el modelo 2 que hemos visto
00:31:11
el meter la clave
00:31:14
en el alumno no haría falta
00:31:16
porque está aquí asociado en el par
00:31:17
pues hombre, no es mala idea que esté siempre aquí
00:31:19
esa información también
00:31:22
que esté siempre aquí
00:31:23
no sería mala idea que esté aquí
00:31:26
¿por qué? porque este objeto alumno
00:31:28
a lo mejor luego se usa en otros sitios
00:31:30
¿vale? a lo mejor este objeto alumno se usa en otros sitios
00:31:33
y hombre, que esté completamente identificado
00:31:40
que esté completamente identificado está muy bien
00:31:42
vete a saber quién usa este alumno en otras partes de la aplicación
00:31:45
su NIF tiene que tenerlo
00:31:48
pero a la hora de trabajar con el map
00:31:49
es verdad que se queda
00:31:51
duplicado, se queda duplicada
00:31:53
la información
00:31:56
y claro, eso sí, tengo que
00:31:56
garantizar yo por programa la coherencia
00:31:59
el alumno que yo meta
00:32:01
aquí, debo yo garantizar
00:32:03
por programa, por código, ponérselo yo
00:32:05
fijárselo que sumirse a este
00:32:07
porque es que si no, el programa ya no tiene sentido
00:32:09
no tendría sentido
00:32:12
aunque, ¿vale?
00:32:13
entonces, está bien que yo mantenga
00:32:15
por código que yo garantice
00:32:17
la coherencia de las dos
00:32:19
informaciones, que garantice la coherencia
00:32:21
de la clave del map
00:32:23
con el NIF que está aquí dentro
00:32:25
si no garantizo yo esa coherencia, luego la aplicación
00:32:27
vete a saber qué cosas, qué resultados
00:32:30
me da, que no me cuadran
00:32:31
uy, no me cuadra, qué extraño, he buscado un alumno
00:32:33
con NIF tal y resulta que me dice que tiene
00:32:35
NIF no sé cuál, si yo que buscas otro
00:32:37
bueno, yo tengo que garantizar esa coherencia
00:32:39
por código, ¿vale?
00:32:41
Entonces, que no
00:32:44
se extrañe que la información está duplicada
00:32:45
que esté duplicada, tiene sentido porque
00:32:47
esta entidad le viene bien
00:32:49
guardarlo todo dentro
00:32:51
para otros usos, para otros métodos a los que se ha
00:32:52
pasado, para lo que sea
00:32:55
lo de que esté aquí fuera
00:32:56
es para facilitar estas cosas
00:32:59
y quien dice el get, dice el delete
00:33:02
y dice otras cosas que se pueden hacer
00:33:03
¿vale?
00:33:05
bueno, ¿queréis que paremos aquí?
00:33:07
- 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:
- 2
- Fecha:
- 3 de marzo de 2026 - 17:30
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 33′ 12″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 516.46 MBytes