1 00:00:00,000 --> 00:00:02,980 Venga, dale 2 00:00:02,980 --> 00:00:04,839 Vale 3 00:00:04,839 --> 00:00:06,179 Pues hemos visto 4 00:00:06,179 --> 00:00:07,599 Cómo guardar 5 00:00:07,599 --> 00:00:09,779 Un montón de cosas a mogollón 6 00:00:09,779 --> 00:00:11,220 Muy bien 7 00:00:11,220 --> 00:00:13,839 En unas listitas 8 00:00:13,839 --> 00:00:17,780 Y en unos conjuntos 9 00:00:17,780 --> 00:00:19,980 ¿Vale? 10 00:00:20,199 --> 00:00:21,719 Si necesitamos orden 11 00:00:21,719 --> 00:00:22,820 Una lista mejor 12 00:00:22,820 --> 00:00:26,199 Pero bueno, un poquito más de computación 13 00:00:26,199 --> 00:00:27,480 A la hora 14 00:00:27,480 --> 00:00:30,519 De hacer los accesos 15 00:00:30,519 --> 00:00:31,260 Las búsquedas 16 00:00:31,260 --> 00:00:33,039 pero bueno, eso es un problema de la CPU 17 00:00:33,039 --> 00:00:34,119 no tanto, no es nuestro 18 00:00:34,119 --> 00:00:36,960 o si no necesitamos orden, pues un conjunto 19 00:00:36,960 --> 00:00:38,600 ahí todo a mogollón y ya está 20 00:00:38,600 --> 00:00:41,100 bueno, esto ya lo tenemos dominado y controlado 21 00:00:41,100 --> 00:00:42,200 ¿vale? 22 00:00:44,200 --> 00:00:45,479 en la vida real 23 00:00:45,479 --> 00:00:47,219 en la vida real hay otra 24 00:00:47,219 --> 00:00:49,460 estructura que realmente 25 00:00:49,460 --> 00:00:51,359 facilita muchísimo las cosas 26 00:00:51,359 --> 00:00:53,159 que es 27 00:00:53,159 --> 00:00:55,240 la estructura del diccionario de toda 28 00:00:55,240 --> 00:00:56,299 la vida, ¿verdad? 29 00:00:57,140 --> 00:00:59,100 es decir, si nosotros tuviéramos 30 00:00:59,100 --> 00:01:01,159 todos los significados 31 00:01:01,159 --> 00:01:02,159 de todo lo que existe 32 00:01:02,159 --> 00:01:04,219 metidos en un conjunto 33 00:01:04,219 --> 00:01:06,819 y tuviéramos que encontrar 34 00:01:06,819 --> 00:01:08,659 el significado mesa 35 00:01:08,659 --> 00:01:10,579 pues ostras 36 00:01:10,579 --> 00:01:13,680 buscar ahí en el conjunto 37 00:01:13,680 --> 00:01:15,280 todos los significados 38 00:01:15,280 --> 00:01:17,299 del lenguaje español 39 00:01:17,299 --> 00:01:18,799 hasta que encontremos el significado 40 00:01:18,799 --> 00:01:20,319 que se adapta al concepto de mesa 41 00:01:20,319 --> 00:01:22,159 sería una locura 42 00:01:22,159 --> 00:01:23,040 ¿vale? 43 00:01:23,879 --> 00:01:25,319 ¿pero qué hace un diccionario? 44 00:01:25,920 --> 00:01:28,060 un diccionario asocia 45 00:01:28,060 --> 00:01:29,900 cada significado 46 00:01:29,900 --> 00:01:32,400 a una palabra clave 47 00:01:32,400 --> 00:01:34,879 que es el término que tiene asociado 48 00:01:34,879 --> 00:01:36,200 lo asocia a una palabra clave 49 00:01:36,200 --> 00:01:38,280 y luego además 50 00:01:38,280 --> 00:01:40,340 al implementar un orden 51 00:01:40,340 --> 00:01:41,739 pero eso ya es secundario 52 00:01:41,739 --> 00:01:42,840 al implementar un orden 53 00:01:42,840 --> 00:01:44,159 pues nos falta la búsqueda 54 00:01:44,159 --> 00:01:46,159 entonces si tú quieres saber 55 00:01:46,159 --> 00:01:46,959 qué es una mesa 56 00:01:46,959 --> 00:01:49,019 vas directamente clave 57 00:01:49,019 --> 00:01:50,319 la clave mía de búsqueda 58 00:01:50,319 --> 00:01:51,060 que es lo que yo quiero 59 00:01:51,060 --> 00:01:52,140 la mesa 60 00:01:52,140 --> 00:01:54,299 vale pues busco por esa clave 61 00:01:54,299 --> 00:01:56,379 y por esa clave ya puedo encontrar 62 00:01:56,379 --> 00:01:57,299 de todo 63 00:01:57,299 --> 00:01:58,780 me encuentro su significado 64 00:01:58,780 --> 00:02:00,519 los sinónimos, todo lo que quiero 65 00:02:00,519 --> 00:02:01,640 lo encuentro ahí todo 66 00:02:01,640 --> 00:02:03,680 pero todo eso que me pueda encontrar 67 00:02:03,680 --> 00:02:06,260 significado, sinónimos, antónimos 68 00:02:06,260 --> 00:02:08,340 traducción al hebreo, todo 69 00:02:08,340 --> 00:02:09,819 lo tengo ahí 70 00:02:09,819 --> 00:02:12,300 asociado a una única clave, que es mesa 71 00:02:12,300 --> 00:02:14,180 ¿qué ahora quiero eso mismo 72 00:02:14,180 --> 00:02:15,560 pero con silla? 73 00:02:16,280 --> 00:02:18,219 pues yo con mi clave silla me voy 74 00:02:18,219 --> 00:02:20,039 a esa estructura de diccionario 75 00:02:20,039 --> 00:02:22,400 y a través 76 00:02:22,400 --> 00:02:24,300 de esa clave silla encuentro 77 00:02:24,300 --> 00:02:26,639 todo lo que está asociado a esa clave 78 00:02:26,639 --> 00:02:28,340 lo que es una silla 79 00:02:28,340 --> 00:02:30,639 sus sinónimos, sus antónimos 80 00:02:30,639 --> 00:02:32,539 pues como se dice en arameo, etcétera 81 00:02:32,539 --> 00:02:33,340 todo lo que yo quiera 82 00:02:33,340 --> 00:02:35,699 ¿vale? entonces una estructura habitual 83 00:02:35,699 --> 00:02:39,120 ¿vale? que los objetos que nosotros manejamos 84 00:02:39,120 --> 00:02:40,500 tengan un montón de cosas 85 00:02:40,500 --> 00:02:43,520 pues alumno tiene un montón de cosas 86 00:02:43,520 --> 00:02:45,460 factura tiene un montón de cosas 87 00:02:45,460 --> 00:02:47,400 y yo a ese montón de cosas 88 00:02:47,400 --> 00:02:49,379 le asocio una clave 89 00:02:49,379 --> 00:02:51,199 que lo identifica de forma única 90 00:02:51,199 --> 00:02:53,419 ¿vale? esa es la idea del diccionario 91 00:02:53,419 --> 00:02:55,759 asociar a cada uno 92 00:02:55,759 --> 00:02:56,599 de mis objetos 93 00:02:56,599 --> 00:02:58,360 Una clave sencillita 94 00:02:58,360 --> 00:03:00,180 Que lo identifique de forma única 95 00:03:00,180 --> 00:03:02,139 Entonces si cada uno de mis objetos 96 00:03:02,139 --> 00:03:04,560 Tiene asociado una clave sencillita 97 00:03:04,560 --> 00:03:05,960 Que lo identifica de forma única 98 00:03:05,960 --> 00:03:07,219 A través de esa clave 99 00:03:07,219 --> 00:03:10,039 Va a ser más fácil acceder 100 00:03:10,039 --> 00:03:12,580 Para eliminar, para recuperar 101 00:03:12,580 --> 00:03:13,300 Lo que sea 102 00:03:13,300 --> 00:03:15,180 Por ejemplo yo en mi set 103 00:03:15,180 --> 00:03:16,699 Yo aquí 104 00:03:16,699 --> 00:03:20,439 Pues tendré, tengo aquí un montón de 105 00:03:20,439 --> 00:03:22,479 Por ejemplo tengo aquí pues eso 106 00:03:22,479 --> 00:03:23,139 Tengo aquí 107 00:03:23,139 --> 00:03:25,280 Un montón de alumnos 108 00:03:25,280 --> 00:03:30,020 con un montón de cosas 109 00:03:30,020 --> 00:03:31,680 esos alumnos 110 00:03:31,680 --> 00:03:33,840 entonces 111 00:03:33,840 --> 00:03:35,580 si yo quiero encontrar 112 00:03:35,580 --> 00:03:38,560 al alumno que cumpla no sé qué condición 113 00:03:38,560 --> 00:03:40,699 con nombre tal, pues me tengo que meter en el conjunto 114 00:03:40,699 --> 00:03:41,539 e ir uno por uno 115 00:03:41,539 --> 00:03:43,780 me voy a ir en el conjunto, voy sacando el conjunto 116 00:03:43,780 --> 00:03:45,080 este no es, este no es, este no es 117 00:03:45,080 --> 00:03:46,919 hasta que encuentro al alumno 118 00:03:46,919 --> 00:03:49,000 pero bueno, es una tarea un poco pesada 119 00:03:49,000 --> 00:03:49,840 ¿vale? 120 00:03:50,479 --> 00:03:52,719 entonces, estrategia de programación 121 00:03:52,719 --> 00:03:53,539 práctica 122 00:03:53,539 --> 00:03:55,740 a cada alumno 123 00:03:55,740 --> 00:03:59,120 asociarle una clave 124 00:03:59,120 --> 00:04:02,000 a cada alumno le asocio una clave 125 00:04:02,000 --> 00:04:05,400 que tiene que ser algo que lo identifique de forma única 126 00:04:05,400 --> 00:04:08,860 no puede haber dos objetos con la misma clave 127 00:04:08,860 --> 00:04:10,620 pues en el caso de alumnos 128 00:04:10,620 --> 00:04:13,879 uno podría pensar en el NIF 129 00:04:13,879 --> 00:04:18,879 entonces cada objeto 130 00:04:18,879 --> 00:04:20,779 que uno de mis alumnos tiene asociada su clave 131 00:04:20,779 --> 00:04:24,519 y ahora ya las búsquedas 132 00:04:24,519 --> 00:04:26,879 por NIF, son mucho más sencillas 133 00:04:26,879 --> 00:04:28,740 yo miro exclusivamente 134 00:04:28,740 --> 00:04:29,379 esto 135 00:04:29,379 --> 00:04:32,639 y digo, ah, este 136 00:04:32,639 --> 00:04:34,699 pues ya está, me saco todo esto 137 00:04:34,699 --> 00:04:36,560 no tengo que meterme en la caja mogollón 138 00:04:36,560 --> 00:04:38,040 hasta que lo encuentro 139 00:04:38,040 --> 00:04:40,819 ¿vale? que quiero eliminar por NIF 140 00:04:40,819 --> 00:04:42,819 ¿vale? pues entonces 141 00:04:42,819 --> 00:04:44,319 ah, es este, fuera 142 00:04:44,319 --> 00:04:46,939 yo tiro de la clave, tiro de la clave 143 00:04:46,939 --> 00:04:48,759 porque buscar en la 144 00:04:48,759 --> 00:04:50,459 en la caja de claves es más fácil 145 00:04:50,459 --> 00:04:52,879 tiro de la clave a este 146 00:04:52,879 --> 00:04:53,939 fuera 147 00:04:53,939 --> 00:04:56,180 ¿vale? no tengo que ir sacándolos 148 00:04:56,180 --> 00:04:58,319 ahí, hasta que encuentro el de eliminar 149 00:04:58,319 --> 00:04:59,079 y eliminarlo 150 00:04:59,079 --> 00:05:01,860 esa es la idea del diccionario 151 00:05:01,860 --> 00:05:04,180 llamado en Java 152 00:05:04,180 --> 00:05:05,199 el map 153 00:05:05,199 --> 00:05:08,060 ¿vale? map pues porque 154 00:05:08,060 --> 00:05:09,379 mapea una clave 155 00:05:09,379 --> 00:05:12,019 a todo su contenido, que puede ser una cosa 156 00:05:12,019 --> 00:05:12,959 enorme, están cosas 157 00:05:12,959 --> 00:05:16,079 entonces, en realidad un map vale 158 00:05:16,079 --> 00:05:17,959 para guardar cosas, lo que pasa es que 159 00:05:17,959 --> 00:05:19,600 no hereda de collection en realidad 160 00:05:19,600 --> 00:05:21,620 si miráis la estructura 161 00:05:21,620 --> 00:05:23,639 de jerarquía de collection 162 00:05:23,639 --> 00:05:25,120 pues no hereda 163 00:05:25,120 --> 00:05:27,180 de collection, map es una 164 00:05:27,180 --> 00:05:29,060 interfaz por sí misma 165 00:05:29,060 --> 00:05:31,300 que luego tiene varias implementaciones 166 00:05:31,300 --> 00:05:33,600 el hash map, el link 167 00:05:33,600 --> 00:05:34,839 el hash map, el tree map 168 00:05:34,839 --> 00:05:36,720 tiene varias implementaciones 169 00:05:36,720 --> 00:05:38,199 ¿no es lo mismo que crisis? 170 00:05:39,540 --> 00:05:40,100 no 171 00:05:40,100 --> 00:05:42,860 y ahora lo vas a ver 172 00:05:42,860 --> 00:05:45,199 entonces esta es la idea, la idea es 173 00:05:45,199 --> 00:05:47,360 asociar a cada objeto 174 00:05:47,360 --> 00:05:48,759 una clave única 175 00:05:48,759 --> 00:05:51,319 ¿vale? entonces si cada objeto tiene asociado 176 00:05:51,319 --> 00:05:53,199 una clave única, ahora a partir 177 00:05:53,199 --> 00:05:55,740 de esa clave, va a ser mucho más sencillo. 178 00:05:56,399 --> 00:05:57,620 Las modificaciones, 179 00:05:58,620 --> 00:05:59,920 las consultas 180 00:05:59,920 --> 00:06:01,079 por clave 181 00:06:01,079 --> 00:06:02,939 y las eliminaciones. 182 00:06:03,579 --> 00:06:05,439 Esa es la idea, que yo no tenga que iterar 183 00:06:05,439 --> 00:06:06,959 para localizar ni para nada. 184 00:06:07,759 --> 00:06:09,100 ¿Tú no tienes el map 185 00:06:09,100 --> 00:06:11,060 en proceso, solo las claves? 186 00:06:11,920 --> 00:06:12,860 No, ahora vamos a ver, 187 00:06:12,959 --> 00:06:14,939 la idea es esta. Vale, ahora vamos a ver cómo se 188 00:06:14,939 --> 00:06:16,500 implementa, cómo se 189 00:06:16,500 --> 00:06:18,500 se implementa esto. 190 00:06:19,699 --> 00:06:20,459 Vale, pues 191 00:06:20,459 --> 00:06:23,120 vale, pues el map 192 00:06:23,120 --> 00:06:25,819 es una caja de pares 193 00:06:25,819 --> 00:06:27,560 un map es esto 194 00:06:27,560 --> 00:06:30,620 un map es una caja de pares 195 00:06:30,620 --> 00:06:33,579 no como una lista 196 00:06:33,579 --> 00:06:38,560 una lista era una caja de objetos sin más 197 00:06:38,560 --> 00:06:40,319 y un set también 198 00:06:40,319 --> 00:06:44,319 un set era una caja de objetos sin más 199 00:06:44,319 --> 00:06:45,600 ahí estaban todos los objetos 200 00:06:45,600 --> 00:06:47,180 aquí con orden y ahí sin orden 201 00:06:47,180 --> 00:06:49,060 pero bueno, eran una caja de objetos 202 00:06:49,060 --> 00:06:52,560 un map es una caja de pares 203 00:06:52,560 --> 00:06:55,480 Cada elemento del map es un par, son dos cosas. 204 00:06:56,040 --> 00:06:58,399 Cada elemento del map son dos cosas, ¿vale? 205 00:06:59,019 --> 00:07:03,120 El primer elemento del map es el que se llama clave. 206 00:07:04,319 --> 00:07:06,420 Y el segundo es el que se llama valor. 207 00:07:08,720 --> 00:07:10,379 ¿Vale? Pues eso es lo que tiene el map. 208 00:07:10,560 --> 00:07:12,860 Un conjunto de pares, una caja con muchos pares. 209 00:07:13,839 --> 00:07:17,019 Y cada par va indisolublemente unido a su clave con su valor. 210 00:07:18,040 --> 00:07:18,500 ¿Vale? 211 00:07:18,500 --> 00:07:21,220 pues esto es un map 212 00:07:21,220 --> 00:07:26,800 clave, valor, clave, valor 213 00:07:26,800 --> 00:07:28,339 entonces 214 00:07:28,339 --> 00:07:30,839 el valor en sí que es 215 00:07:30,839 --> 00:07:33,300 pues el objeto gordo, el dato que yo quiero guardar 216 00:07:33,300 --> 00:07:34,819 el valor en sí 217 00:07:34,819 --> 00:07:37,139 sería lo que yo 218 00:07:37,139 --> 00:07:38,720 en realidad guardo en la lista 219 00:07:38,720 --> 00:07:40,319 es la idea 220 00:07:40,319 --> 00:07:42,439 el objeto gordo, el dato 221 00:07:42,439 --> 00:07:44,500 el alumno entero, lo que yo quiera 222 00:07:44,500 --> 00:07:46,139 y la clave 223 00:07:46,139 --> 00:07:47,519 que está afuera 224 00:07:47,519 --> 00:07:51,060 es aquello 225 00:07:51,060 --> 00:07:53,100 que lo identifica de forma única 226 00:07:53,100 --> 00:07:55,379 un if, un entero 227 00:07:55,379 --> 00:07:56,480 lo que sea 228 00:07:56,480 --> 00:08:01,100 entonces las claves 229 00:08:01,100 --> 00:08:02,600 obligatoriamente 230 00:08:02,600 --> 00:08:04,639 tienen que ser 231 00:08:04,639 --> 00:08:06,800 únicas, si yo intento 232 00:08:06,800 --> 00:08:08,860 meter en un map un par 233 00:08:08,860 --> 00:08:10,839 porque en el map siempre que meta algo 234 00:08:10,839 --> 00:08:12,779 tiene que ser un par, clave, valor 235 00:08:12,779 --> 00:08:14,680 clave, valor, no puedo meter un valor suelto 236 00:08:14,680 --> 00:08:16,220 o una clave suelta, no 237 00:08:16,220 --> 00:08:18,720 clave, valor, bueno puedo meter una clave 238 00:08:18,720 --> 00:08:20,740 asociada a un null, puedo 239 00:08:20,740 --> 00:08:22,959 ¿vale? pero no puedo 240 00:08:22,959 --> 00:08:24,540 meter una clave null, la clave null no 241 00:08:24,540 --> 00:08:26,939 entonces pues siempre que meta 242 00:08:26,939 --> 00:08:27,980 en un map un par 243 00:08:27,980 --> 00:08:30,379 las dos cosas obligatorias 244 00:08:30,379 --> 00:08:32,960 la clave tiene que ser única 245 00:08:32,960 --> 00:08:34,320 para que me deje meterlo 246 00:08:34,320 --> 00:08:36,659 si trato de meter 247 00:08:36,659 --> 00:08:39,299 un par donde la clave está repetida 248 00:08:39,299 --> 00:08:41,000 no inserta un par 249 00:08:41,000 --> 00:08:42,919 nuevo, lo que hace es 250 00:08:42,919 --> 00:08:45,019 modificar el valor del que ya hay 251 00:08:45,019 --> 00:08:47,220 ahora lo probamos con tres o cuatro ejemplitos 252 00:08:47,220 --> 00:08:48,779 sencillos, ¿vale? 253 00:08:48,820 --> 00:08:50,320 simplemente esto es para ver en general 254 00:08:50,320 --> 00:08:51,720 de que va, nada más 255 00:08:51,720 --> 00:08:53,320 vale 256 00:08:53,320 --> 00:08:54,840 entonces 257 00:08:54,840 --> 00:08:57,919 los valores 258 00:08:57,919 --> 00:09:00,059 sí pueden estar repetidos 259 00:09:00,059 --> 00:09:02,399 es decir, puede haber dos claves 260 00:09:02,399 --> 00:09:03,860 que tengan asociados aquí 261 00:09:03,860 --> 00:09:06,340 dos objetos iguales, el mismo 262 00:09:06,340 --> 00:09:08,399 objeto, incluso con la 263 00:09:08,399 --> 00:09:10,279 misma dirección de memoria, eso no es problema 264 00:09:10,279 --> 00:09:12,440 los valores pueden estar repetidos 265 00:09:12,440 --> 00:09:14,639 lo único que importa es que las claves no lo estén 266 00:09:14,639 --> 00:09:16,279 vale, en un diccionario normal 267 00:09:16,279 --> 00:09:18,539 dos palabras 268 00:09:18,539 --> 00:09:20,679 Pueden tener el mismo significado idéntico 269 00:09:20,679 --> 00:09:22,559 Pero son dos claves distintas 270 00:09:22,559 --> 00:09:24,320 Hembra, mujer, me da igual 271 00:09:24,320 --> 00:09:27,120 No has dicho que la clave 272 00:09:27,120 --> 00:09:29,059 Es la clave primaria 273 00:09:29,059 --> 00:09:31,960 La clave lo tiene que identificar 274 00:09:31,960 --> 00:09:32,740 De forma única 275 00:09:32,740 --> 00:09:34,799 Pero son dos cosas distintas 276 00:09:34,799 --> 00:09:37,879 Tú dijiste que por un lado 277 00:09:37,879 --> 00:09:38,720 Hay que tener una clave 278 00:09:38,720 --> 00:09:40,259 Y por otro lado el valor 279 00:09:40,259 --> 00:09:42,799 Cuando tú guardas en un map 280 00:09:42,799 --> 00:09:44,759 Aquí ya no es tan importante 281 00:09:44,759 --> 00:09:46,080 Que esté la clave 282 00:09:46,080 --> 00:09:48,539 porque esa clave la tienes aquí 283 00:09:48,539 --> 00:09:50,759 fuera, tú puedes hacer el diseño 284 00:09:50,759 --> 00:09:51,759 que quieras en realidad 285 00:09:51,759 --> 00:09:54,159 ¿vale? entonces si tú vas a 286 00:09:54,159 --> 00:09:55,740 tú has diseñado tu aplicación 287 00:09:55,740 --> 00:09:58,059 para que los alumnos estén en un map 288 00:09:58,059 --> 00:10:00,740 el objeto alumno, la clase alumno 289 00:10:00,740 --> 00:10:01,879 no tiene por qué tener un NIF 290 00:10:01,879 --> 00:10:03,480 porque ese NIF ya está 291 00:10:03,480 --> 00:10:05,679 en la clave del map 292 00:10:05,679 --> 00:10:10,470 ¿vale? pero eso sí, si luego 293 00:10:10,470 --> 00:10:12,529 esos objetos alumnos los usas en otras 294 00:10:12,529 --> 00:10:14,669 colecciones, si no tiene una propiedad 295 00:10:14,669 --> 00:10:16,350 clave primaria, pues ahí sí que sería 296 00:10:16,350 --> 00:10:18,409 complejo, pero si solo lo usas en un map 297 00:10:18,409 --> 00:10:20,370 no hay problema, porque esto ya hace 298 00:10:20,370 --> 00:10:20,990 como clave 299 00:10:20,990 --> 00:10:24,350 entonces esta estructura de aquí 300 00:10:24,350 --> 00:10:26,230 ahora ya hace 301 00:10:26,230 --> 00:10:28,850 que todo sea mucho más sencillo 302 00:10:28,850 --> 00:10:30,389 es mucho más sencillo 303 00:10:30,389 --> 00:10:32,389 manejar conjuntos de 304 00:10:32,389 --> 00:10:34,409 alumnos, de facturas, de no sé qué, si están en 305 00:10:34,409 --> 00:10:36,490 un map, que si están en una colección 306 00:10:36,490 --> 00:10:37,850 sin clave asociada 307 00:10:37,850 --> 00:10:40,230 ¿vale? vamos a ver 308 00:10:40,230 --> 00:10:41,029 cómo se 309 00:10:41,029 --> 00:10:44,169 se usaría 310 00:10:44,169 --> 00:11:04,379 Venga, pues a ver 311 00:11:04,379 --> 00:11:11,740 Pues venga, ejemplo más 312 00:11:11,740 --> 00:11:12,480 Vamos a hacer 313 00:11:12,480 --> 00:11:51,080 Vale, pues por ejemplo, vamos a suponer que yo tengo 314 00:11:51,080 --> 00:11:53,379 Pues ala, alumnos 315 00:11:53,379 --> 00:11:57,379 A ver, espera, que no he hecho ningún paquete 316 00:11:57,379 --> 00:11:59,379 Y eso, eso es muy peligroso 317 00:12:01,879 --> 00:12:03,379 Pues yo que sé 318 00:12:03,379 --> 00:12:05,779 Modelo, pues venga 319 00:12:05,779 --> 00:12:08,779 Voy a trabajar con alumnos 320 00:12:08,779 --> 00:12:18,279 venga, propiedades, nombre y nota 321 00:12:18,279 --> 00:12:41,220 con get y set 322 00:12:41,220 --> 00:12:42,980 lo ideal sería pues un constructor 323 00:12:42,980 --> 00:12:44,980 un toString, un equals 324 00:12:44,980 --> 00:12:46,639 lo de siempre, pero bueno ahorramos tiempo 325 00:12:46,639 --> 00:12:52,379 vale, si yo fuera a usar 326 00:12:52,379 --> 00:12:54,360 esto con list o con set 327 00:12:54,360 --> 00:12:56,340 aquí pues de nuevo tendría 328 00:12:56,340 --> 00:12:57,700 que plantearme, vamos a ver 329 00:12:57,700 --> 00:13:00,679 en un list cuando tú quieras 330 00:13:00,679 --> 00:13:02,700 cuál es tu criterio de igualdad 331 00:13:02,700 --> 00:13:04,419 o en un set 332 00:13:04,419 --> 00:13:05,779 cuál es tu criterio de igualdad 333 00:13:05,779 --> 00:13:08,679 para cuando quieras borrar un alumno, localizarlo 334 00:13:08,679 --> 00:13:10,600 pues habría que decidirlo 335 00:13:10,600 --> 00:13:12,440 dentro de los parámetros que tenemos 336 00:13:12,440 --> 00:13:13,440 habría que decidirlo 337 00:13:13,440 --> 00:13:16,379 el nombre, vale, pero entonces 338 00:13:16,379 --> 00:13:18,720 cuidado que tu aplicación no va a permitir 339 00:13:18,720 --> 00:13:20,799 alumnos con el mismo nombre 340 00:13:20,799 --> 00:13:23,159 ¿es un problema? 341 00:13:23,320 --> 00:13:24,120 no, no es un problema 342 00:13:24,120 --> 00:13:26,299 es imposible que dos alumnos se llamen igual 343 00:13:26,299 --> 00:13:28,419 imposible, pues no es un problema, tiro 344 00:13:28,419 --> 00:13:29,259 y ya está 345 00:13:29,259 --> 00:13:32,320 cuidado que tu aplicación sí puede ser 346 00:13:32,320 --> 00:13:34,259 que tú tengas alumnos que se llamen igual 347 00:13:34,259 --> 00:13:36,460 cuidado, venga pues añade 348 00:13:36,460 --> 00:13:37,980 un if que los identifique 349 00:13:37,980 --> 00:13:40,019 haces un equals por nif y ahora ya no tienes 350 00:13:40,019 --> 00:13:42,120 problemas con tus list o tus set para hacer 351 00:13:42,120 --> 00:13:44,059 remove, etcétera. Bueno, estas son 352 00:13:44,059 --> 00:13:45,679 las consideraciones que hemos hecho hasta ahora. 353 00:13:46,159 --> 00:13:46,340 ¿Vale? 354 00:13:47,960 --> 00:13:49,919 Bueno, aquí, aunque sería, aún así, 355 00:13:49,919 --> 00:13:50,679 sería feo 356 00:13:50,679 --> 00:13:53,840 dejarlo así, sin clave 357 00:13:53,840 --> 00:13:55,620 primaria, aunque sería feo. 358 00:13:56,259 --> 00:13:58,059 Vamos a decidir 359 00:13:58,059 --> 00:13:59,899 por cuestiones de diseño que vamos 360 00:13:59,899 --> 00:14:00,860 a trabajar en un map. 361 00:14:01,820 --> 00:14:03,679 ¿Vale? Pues si trabajamos en un map, 362 00:14:04,399 --> 00:14:06,100 el nif, que es lo que lo identifica 363 00:14:06,100 --> 00:14:07,600 de forma única, puede ser la clave. 364 00:14:07,980 --> 00:14:09,940 Del map, con lo cual no tengo que meterlo aquí. 365 00:14:10,899 --> 00:14:14,039 Venga, vamos a hacernos ahora nuestra aplicación. 366 00:14:15,200 --> 00:14:18,379 Ahora ya sí, nuestra aplicación que trabaja con estos alumnos. 367 00:14:22,009 --> 00:14:28,090 Venga, pues nuestra aplicación con el método main, este de aquí. 368 00:14:33,740 --> 00:14:36,120 Vale, datos de mi aplicación. 369 00:14:36,700 --> 00:14:39,879 Un map de alumnos. 370 00:14:39,879 --> 00:14:42,039 vale, si yo quiero un map 371 00:14:42,039 --> 00:14:44,159 el map necesita 372 00:14:44,159 --> 00:14:46,440 dos tipos 373 00:14:46,440 --> 00:14:48,639 el tipo 374 00:14:48,639 --> 00:14:50,320 al que pertenece la clave 375 00:14:50,320 --> 00:14:52,240 y el tipo al que pertenece el valor 376 00:14:52,240 --> 00:14:59,220 no, no la he puesto 377 00:14:59,220 --> 00:15:01,019 vale 378 00:15:01,019 --> 00:15:03,120 vale, pues entonces 379 00:15:03,120 --> 00:15:04,860 yo voy a usar mis alumnos en un map 380 00:15:04,860 --> 00:15:07,360 bueno, pues entonces me voy a declarar 381 00:15:07,360 --> 00:15:09,139 aquí van a estar mis datos, mis alumnos 382 00:15:09,139 --> 00:15:13,669 vale, el map 383 00:15:13,669 --> 00:15:16,289 necesita dos tipos 384 00:15:16,289 --> 00:15:16,830 de datos 385 00:15:16,830 --> 00:15:20,110 para instanciarse, el primero 386 00:15:20,110 --> 00:15:22,129 es el tipo al que pertenece la clave 387 00:15:22,129 --> 00:15:23,870 y el segundo 388 00:15:23,870 --> 00:15:25,470 el tipo al que pertenece el valor 389 00:15:25,470 --> 00:15:28,070 el tipo al que pertenece el valor 390 00:15:28,070 --> 00:15:29,970 en este caso está claro, van a ser alumnos 391 00:15:29,970 --> 00:15:31,990 y ahora 392 00:15:31,990 --> 00:15:34,070 la clave, que va a 393 00:15:34,070 --> 00:15:35,970 identificar de forma única 394 00:15:35,970 --> 00:15:36,970 a cada alumno 395 00:15:36,970 --> 00:15:39,850 a cada alumno lo va a identificar 396 00:15:39,850 --> 00:15:41,330 de forma única 397 00:15:41,330 --> 00:15:43,129 su NIF, por ejemplo 398 00:15:43,129 --> 00:15:45,389 el NIF es una cadena 399 00:15:45,389 --> 00:15:47,269 pues entonces string 400 00:15:47,269 --> 00:15:56,490 tranquilos 401 00:15:56,490 --> 00:15:58,210 que prisas 402 00:15:58,210 --> 00:16:00,470 vale, con esto yo he dicho 403 00:16:00,470 --> 00:16:02,610 mi estructura de datos 404 00:16:02,610 --> 00:16:04,250 va a ser un par 405 00:16:04,250 --> 00:16:06,269 un montón de pares 406 00:16:06,269 --> 00:16:08,590 donde cada par tendrá en la clave 407 00:16:08,590 --> 00:16:09,990 el NIF del alumno 408 00:16:09,990 --> 00:16:12,509 y en el valor el propio 409 00:16:12,509 --> 00:16:13,330 objeto alumno 410 00:16:13,330 --> 00:16:16,809 Está declarado, pero bueno, vamos a instanciarlo 411 00:16:16,809 --> 00:16:21,600 Map es la interfaz 412 00:16:21,600 --> 00:16:23,240 Tiene varias 413 00:16:23,240 --> 00:16:25,779 Posibles implementaciones 414 00:16:25,779 --> 00:16:26,100 Map 415 00:16:26,100 --> 00:16:28,100 Tiene HashMap 416 00:16:28,100 --> 00:16:31,320 LinkedHashMap y Tremap 417 00:16:31,320 --> 00:16:32,320 Entonces 418 00:16:32,320 --> 00:16:34,379 Como veis 419 00:16:34,379 --> 00:16:37,659 Casan perfectamente con HashSet, LinkedHashSet 420 00:16:37,659 --> 00:16:38,600 Y Treset 421 00:16:38,600 --> 00:16:40,019 ¿Por qué? 422 00:16:44,080 --> 00:16:44,720 LinkedHashSet 423 00:16:44,720 --> 00:16:46,360 dijimos que es igual a todos los efectos 424 00:16:46,360 --> 00:16:48,139 que HashSet, pero 425 00:16:48,139 --> 00:16:50,539 conserva el orden de inserción. 426 00:16:51,279 --> 00:16:52,320 Con lo cual, si tú en un 427 00:16:52,320 --> 00:16:53,960 LinkedHashSet iteras, 428 00:16:54,700 --> 00:16:56,259 te va a salir por el mismo orden 429 00:16:56,259 --> 00:16:57,379 en que lo insertaste. 430 00:16:58,120 --> 00:16:59,279 Que el HashSet no. 431 00:17:00,139 --> 00:17:05,259 ¿Vale? Pues el HashMap 432 00:17:05,259 --> 00:17:06,839 es una posible implementación 433 00:17:06,839 --> 00:17:08,519 la más 434 00:17:08,519 --> 00:17:12,349 habitual. 435 00:17:13,890 --> 00:17:15,529 El HashMap significa 436 00:17:15,529 --> 00:17:17,170 las claves 437 00:17:17,170 --> 00:17:18,650 se guardan en un HashSet. 438 00:17:18,650 --> 00:17:20,470 Es lo único que significa 439 00:17:20,470 --> 00:17:33,839 Las claves 440 00:17:33,839 --> 00:17:34,920 ¿Vale? 441 00:17:35,619 --> 00:17:37,180 Guarda las claves en un hash set 442 00:17:37,180 --> 00:17:38,559 Entonces 443 00:17:38,559 --> 00:17:43,579 Eso automáticamente nos lleva a cuidadín 444 00:17:43,579 --> 00:17:45,599 String que tenga hasco de equals 445 00:17:45,599 --> 00:17:46,720 Ah, lo tiene, no hay problema 446 00:17:46,720 --> 00:17:49,579 Lo tiene porque string, la clase string ya está hecha 447 00:17:49,579 --> 00:17:50,640 Tiene hasco de equals 448 00:17:50,640 --> 00:17:55,619 Pero bueno, vamos a ver cómo se usaría 449 00:17:55,619 --> 00:17:57,559 Vale, vamos a empezar a introducir 450 00:17:57,559 --> 00:17:59,460 Alumnos, ¿vale? Vamos a meter 451 00:17:59,460 --> 00:18:00,279 Un primer alumno 452 00:18:00,279 --> 00:18:03,140 Alumnos, aquí no es add 453 00:18:03,140 --> 00:18:06,039 Para insertar en un diccionario o map 454 00:18:06,039 --> 00:18:08,420 Es put 455 00:18:08,420 --> 00:18:09,980 ¿Vale? 456 00:18:10,700 --> 00:18:13,220 Y hay que meter dos cosas, efectivamente 457 00:18:13,220 --> 00:18:16,839 Hay que meter la clave del alumno 458 00:18:16,839 --> 00:18:18,599 Y el alumno 459 00:18:18,599 --> 00:18:25,579 Me voy a hacer un constructor con parámetros 460 00:18:25,579 --> 00:18:28,680 Para poder meterlo aquí directamente 461 00:18:28,680 --> 00:18:35,289 ¿Vale? 462 00:18:36,170 --> 00:18:38,549 Cada inserción en el map 463 00:18:38,549 --> 00:18:40,670 Implica insertar dos cosas 464 00:18:40,670 --> 00:18:43,089 la clave y el valor 465 00:18:43,089 --> 00:18:46,940 vale, entonces yo aquí me he insertado 466 00:18:46,940 --> 00:18:48,579 ahora ya mi map tiene dos cosas 467 00:18:48,579 --> 00:18:52,299 vamos a verlo 468 00:18:52,299 --> 00:18:58,400 num 469 00:18:58,400 --> 00:19:01,039 tiene dos cosas pero un solo elemento, claro 470 00:19:01,039 --> 00:19:02,759 num alumnos 471 00:19:02,759 --> 00:19:04,859 alumnos.size 472 00:19:04,859 --> 00:19:07,119 el size lo tiene, que es la cantidad de pares que tiene 473 00:19:07,119 --> 00:19:09,480 si ejecutamos esto 474 00:19:09,480 --> 00:19:14,000 uy 475 00:19:14,000 --> 00:19:17,339 main 476 00:19:17,339 --> 00:19:26,670 vale, pues un alumno he metido 477 00:19:26,670 --> 00:19:27,650 con los dos valores 478 00:19:27,650 --> 00:19:33,390 Vale, voy a meter otro 479 00:19:33,390 --> 00:19:38,769 Ahora le ponemos valores 480 00:19:38,769 --> 00:19:39,410 O lo que sea 481 00:19:39,410 --> 00:19:43,589 Si yo intento hacer esto 482 00:19:43,589 --> 00:19:48,039 Esto no lo va a hacer 483 00:19:48,039 --> 00:19:50,079 No va a meter otro elemento 484 00:19:50,079 --> 00:19:51,700 No va a meter otro 485 00:19:51,700 --> 00:19:53,460 Porque la clave ya existe 486 00:19:53,460 --> 00:20:02,259 Pueden insertar 487 00:20:02,259 --> 00:20:04,059 Claves 488 00:20:04,059 --> 00:20:05,859 Repetidas 489 00:20:05,859 --> 00:20:07,519 No se pueden 490 00:20:07,519 --> 00:20:09,640 Si volvemos a ejecutar esto 491 00:20:09,640 --> 00:20:11,700 Pues efectivamente 492 00:20:11,700 --> 00:20:14,359 uno y uno 493 00:20:14,359 --> 00:20:18,920 no se pueden insertar claves repetidas 494 00:20:18,920 --> 00:20:20,220 está claro, ¿vale? 495 00:20:20,880 --> 00:20:22,900 no te dice nada, simplemente no inserta 496 00:20:22,900 --> 00:20:24,579 porque ya existe uno con esta clave 497 00:20:24,579 --> 00:20:29,380 lo que acabamos de hacer 498 00:20:29,380 --> 00:20:33,000 no te dice nada, simplemente no te lo inserta 499 00:20:33,000 --> 00:20:36,359 vale, entonces 500 00:20:36,359 --> 00:20:37,740 ahora, ¿cuál es la ventaja 501 00:20:37,740 --> 00:20:40,619 de esto? que yo ahora 502 00:20:40,619 --> 00:20:42,440 si quiero el alumno 503 00:20:42,440 --> 00:20:43,680 de NIF, el que sea 504 00:20:43,680 --> 00:20:45,960 Lo obtengo directamente a la primera 505 00:20:45,960 --> 00:20:48,460 En una lista no, en una lista tenía que recorrerla 506 00:20:48,460 --> 00:20:50,279 Hasta encontrar el alumno con ese NIF 507 00:20:50,279 --> 00:20:52,259 ¿Vale? Aquí no 508 00:20:52,259 --> 00:20:54,640 Por ejemplo, voy a meter otro con otro NIF 509 00:20:54,640 --> 00:21:02,609 5, 6, 7, 8 510 00:21:02,609 --> 00:21:04,289 Tengo otro alumno 511 00:21:04,289 --> 00:21:06,549 Este ya sí lo va a meter 512 00:21:06,549 --> 00:21:10,829 Si yo hago aquí el system out 513 00:21:10,829 --> 00:21:14,369 Este tercer put ya sí que sí 514 00:21:14,369 --> 00:21:15,789 Este ya sí 515 00:21:15,789 --> 00:21:16,769 Vale 516 00:21:16,769 --> 00:21:17,650 vale 517 00:21:17,650 --> 00:21:24,819 lo sustituye, en este caso 518 00:21:24,819 --> 00:21:27,660 te crea este otro alumno nuevo vacío 519 00:21:27,660 --> 00:21:28,420 lo sustituye 520 00:21:28,420 --> 00:21:30,240 vale 521 00:21:30,240 --> 00:21:32,400 entonces 522 00:21:32,400 --> 00:21:35,240 ahora, ¿qué ventaja tiene esto? 523 00:21:35,380 --> 00:21:36,619 yo quiero al alumno 524 00:21:36,619 --> 00:21:39,079 de NIF 5678 525 00:21:39,079 --> 00:21:40,460 para hacer algo con él 526 00:21:40,460 --> 00:21:43,319 para ponerle por ejemplo una nota 527 00:21:43,319 --> 00:21:45,819 pues ¿cómo saco yo 528 00:21:45,819 --> 00:21:47,619 el alumno por clave? 529 00:21:52,200 --> 00:21:53,500 pues muy sencillo 530 00:21:53,500 --> 00:21:58,269 alumnos.get 531 00:21:58,269 --> 00:21:59,809 y la clave que yo quiera. 532 00:22:00,809 --> 00:22:02,430 5, 6, 7, 8. 533 00:22:02,630 --> 00:22:02,789 ¡Hala! 534 00:22:03,490 --> 00:22:05,789 Ya tengo el alumno asociado a esta clave. 535 00:22:06,869 --> 00:22:07,509 Ya lo tengo. 536 00:22:08,430 --> 00:22:10,849 Y yo aquí ya le pongo el nombre que me dé la gana. 537 00:22:29,119 --> 00:22:31,779 ¿Esta primera clave no es una propiedad del alumno? 538 00:22:32,279 --> 00:22:32,420 No. 539 00:22:33,420 --> 00:22:34,680 No es una propiedad del alumno. 540 00:22:35,119 --> 00:22:36,279 Es un dato del alumno, 541 00:22:36,279 --> 00:22:38,680 pero lo tienes tú en el map 542 00:22:38,680 --> 00:22:40,680 sacado, o sea, no lo tienes dentro de la clave 543 00:22:40,680 --> 00:22:43,480 claro 544 00:22:43,480 --> 00:22:46,960 este puede ser 545 00:22:46,960 --> 00:22:48,539 este podría ser un diseño 546 00:22:48,539 --> 00:22:50,420 ¿vale? pero 547 00:22:50,420 --> 00:22:52,640 ahora volvemos con eso 548 00:22:52,640 --> 00:22:54,960 ¿vale? este podría ser un diseño y toda la aplicación 549 00:22:54,960 --> 00:22:55,799 podría tirar así 550 00:22:55,799 --> 00:22:58,420 ¿vale? entonces, ahora 551 00:22:58,420 --> 00:23:00,079 luego habría que volver con eso, pero 552 00:23:00,079 --> 00:23:02,720 entonces, esta es la principal 553 00:23:02,720 --> 00:23:04,880 ventaja, ¿qué ocurriría 554 00:23:04,880 --> 00:23:06,940 si yo hubiera decidido un diseño 555 00:23:06,940 --> 00:23:09,539 en el cual mis alumnos van a una lista? 556 00:23:11,099 --> 00:23:13,039 Pues si yo decido mi diseño 557 00:23:13,039 --> 00:23:15,960 con un modelo que mis alumnos vayan a una lista, 558 00:23:17,380 --> 00:23:19,720 tendría que meter, entonces, ahora ya sí, 559 00:23:20,019 --> 00:23:22,099 el NIF aquí dentro, ¿vale? 560 00:23:24,160 --> 00:23:25,839 O sea, imaginaos una aplicación 561 00:23:25,839 --> 00:23:27,980 que es para ponerle nombres y notas a alumnos, 562 00:23:28,359 --> 00:23:31,200 donde los alumnos se caracterizan por su NIF. 563 00:23:31,819 --> 00:23:34,220 Yo decido hacerla como me dé la gana, ¿vale? 564 00:23:34,220 --> 00:23:36,059 una posible decisión 565 00:23:36,059 --> 00:23:37,700 mis alumnos van a un map 566 00:23:37,700 --> 00:23:39,519 la clave el nif 567 00:23:39,519 --> 00:23:42,400 y en el alumno por tanto ya no es obligatorio 568 00:23:42,400 --> 00:23:44,079 que ponga el nif, no es obligatorio 569 00:23:44,079 --> 00:23:46,059 entonces yo ya tiro así 570 00:23:46,059 --> 00:23:48,819 cada vez que meta el alumno le meto con su nif 571 00:23:48,819 --> 00:23:50,720 porque el alumno siempre va a llevar su clave 572 00:23:50,720 --> 00:23:52,359 asociada, van en par 573 00:23:52,359 --> 00:23:54,720 todo el rato, van en par, en un map van en par 574 00:23:54,720 --> 00:23:56,160 la va a llevar asociada 575 00:23:56,160 --> 00:23:57,980 con lo cual el alumno nunca va a perder su nif 576 00:23:57,980 --> 00:23:59,819 no hace falta que esté aquí dentro 577 00:23:59,819 --> 00:24:02,359 ¿vale? pero porque 578 00:24:02,359 --> 00:24:05,039 mis datos están solo en ese map 579 00:24:05,039 --> 00:24:07,140 están solo en ese map, no hay problema 580 00:24:07,140 --> 00:24:09,279 puedo tirar así con la aplicación, tranquilamente 581 00:24:09,279 --> 00:24:11,000 ventaja que me he encontrado 582 00:24:11,000 --> 00:24:13,259 que para buscar un alumno por 583 00:24:13,259 --> 00:24:15,240 NIF, tengo el GET, facilísimo 584 00:24:15,240 --> 00:24:17,359 si yo hiciera 585 00:24:17,359 --> 00:24:18,299 esto con una lista 586 00:24:18,299 --> 00:24:21,240 si yo hiciera esto con una lista 587 00:24:21,240 --> 00:24:23,339 aquí no hay pares 588 00:24:23,339 --> 00:24:25,019 clave valor, luego el NIF 589 00:24:25,019 --> 00:24:27,259 tendría que ir en el alumno, por ejemplo 590 00:24:27,259 --> 00:24:28,900 me voy a hacer el modelo 2 591 00:24:28,900 --> 00:24:30,660 donde el alumno si tiene el NIF 592 00:24:30,660 --> 00:24:33,119 me voy a hacer aquí el package 593 00:24:33,119 --> 00:24:35,079 modelo 2 594 00:24:35,079 --> 00:24:39,039 y voy a hacer mi alumno 595 00:24:39,039 --> 00:24:43,170 ¿vale? 596 00:24:45,170 --> 00:24:45,609 a ver 597 00:24:45,609 --> 00:24:47,869 repito 598 00:24:47,869 --> 00:24:50,710 cuanto más tenga que repetir más tarde no vamos a ir 599 00:24:50,710 --> 00:24:52,410 así que enteraos a la primera 600 00:24:52,410 --> 00:24:53,509 porque si no 601 00:24:53,509 --> 00:24:56,029 repito, vale 602 00:24:56,029 --> 00:24:58,650 aplicación que tiene que trabajar con 603 00:24:58,650 --> 00:25:00,509 alumnos que se caracterizan por 604 00:25:00,509 --> 00:25:01,509 nombre nota y sunif 605 00:25:01,509 --> 00:25:03,609 yo sé que es único 606 00:25:03,609 --> 00:25:06,369 y lo que voy a hacer con la aplicación es ponerles 607 00:25:06,369 --> 00:25:08,190 notas y nombres y luego recorrerlos 608 00:25:08,190 --> 00:25:09,150 lo que yo quiera, vale 609 00:25:09,150 --> 00:25:12,450 modelos posibles, diseños posibles 610 00:25:12,450 --> 00:25:13,690 tropecientos mil 611 00:25:13,690 --> 00:25:16,170 uno posible, mira 612 00:25:16,170 --> 00:25:18,430 mis datos van a ir a un map 613 00:25:18,430 --> 00:25:20,609 luego en mi clase 614 00:25:20,609 --> 00:25:22,670 alumno, como en el map 615 00:25:22,670 --> 00:25:24,430 va siempre clave, valor 616 00:25:24,430 --> 00:25:26,349 clave, valor, la clave 617 00:25:26,349 --> 00:25:28,650 que sea el nif, con lo cual 618 00:25:28,650 --> 00:25:30,470 en alumno no hace falta que vaya al nif 619 00:25:30,470 --> 00:25:32,569 como el alumno, el objeto alumno 620 00:25:32,569 --> 00:25:34,809 con su nombre y nota, va a ir siempre pegadito 621 00:25:34,809 --> 00:25:36,349 a la clave, siempre pegadito 622 00:25:36,349 --> 00:25:38,650 pues no va a perder su clave nunca, ahí va 623 00:25:38,650 --> 00:25:40,750 en el mapa, vale, pues con ese diseño 624 00:25:40,750 --> 00:25:42,349 ya tiro, me hago mi alumno así 625 00:25:42,349 --> 00:25:44,609 en mi main me hago yo mi map 626 00:25:44,609 --> 00:25:46,430 de string 627 00:25:46,430 --> 00:25:48,630 que es el nif, alumno que es el valor 628 00:25:48,630 --> 00:25:50,549 y aquí ya meto los alumnos 629 00:25:50,549 --> 00:25:52,130 los recupero por clave, etc 630 00:25:52,130 --> 00:25:53,710 vale, hasta ahí está claro 631 00:25:53,710 --> 00:25:57,880 diseño 2, no voy a usar 632 00:25:57,880 --> 00:26:00,099 un map, diseño 2, para que veamos 633 00:26:00,099 --> 00:26:01,180 la ventaja de usar un map 634 00:26:01,180 --> 00:26:04,220 diseño dos, no, no voy a usar un más, mis alumnos todos a una lista 635 00:26:04,220 --> 00:26:05,799 pues entonces 636 00:26:05,799 --> 00:26:08,099 como los alumnos se caracterizan por tres cosas 637 00:26:08,099 --> 00:26:10,019 NIF, nombre y nota 638 00:26:10,019 --> 00:26:11,619 y van a la lista 639 00:26:11,619 --> 00:26:12,960 donde no hay claves, ni hay nada 640 00:26:12,960 --> 00:26:15,400 mi alumno tiene que tener la nota 641 00:26:15,400 --> 00:26:17,799 perdón, el NIF, por eso estoy haciendo 642 00:26:17,799 --> 00:26:19,240 esa otra versión, modelo dos 643 00:26:19,240 --> 00:26:21,500 pues en mi versión modelo dos 644 00:26:21,500 --> 00:26:23,619 mi alumno tendría que tener el NIF 645 00:26:23,619 --> 00:26:25,700 porque va a ir a una lista y la lista 646 00:26:25,700 --> 00:26:27,079 ni tiene claves, ni tiene nada 647 00:26:27,079 --> 00:26:30,079 vale, pues le pongo el NIF 648 00:26:30,079 --> 00:26:32,180 Y le añado aquí su getty set 649 00:26:32,180 --> 00:26:37,289 Vale 650 00:26:37,289 --> 00:26:40,089 Me voy a hacer ahora el main con este modelo 651 00:26:40,089 --> 00:26:42,829 En mi paquete main2 652 00:26:42,829 --> 00:26:44,569 Para que quede claro en el proyecto 653 00:26:44,569 --> 00:26:47,759 Main2 654 00:26:47,759 --> 00:26:49,180 Me hago el main con este modelo 655 00:26:49,180 --> 00:26:51,799 Y me hago yo ahora 656 00:26:51,799 --> 00:26:53,759 Mi clase main 657 00:26:53,759 --> 00:26:57,420 Y me sale más complicada 658 00:26:57,420 --> 00:26:59,920 Vale 659 00:26:59,920 --> 00:27:03,160 Mi clase main que ahora no va a trabajar con un map 660 00:27:03,160 --> 00:27:03,799 De map nada 661 00:27:03,799 --> 00:27:07,259 Va a trabajar con una lista 662 00:27:07,259 --> 00:27:09,000 Por ejemplo, lista de alumnos 663 00:27:09,000 --> 00:27:12,460 newArrayList, por ejemplo 664 00:27:12,460 --> 00:27:17,319 ala, modelo2 665 00:27:17,319 --> 00:27:19,640 lista de alumnos, el alumno tiene dentro su 666 00:27:19,640 --> 00:27:21,200 if, ahora 667 00:27:21,200 --> 00:27:22,700 para añadir 668 00:27:22,700 --> 00:27:25,920 pues nada, yo añado 669 00:27:25,920 --> 00:27:27,680 ya sabemos como 670 00:27:27,680 --> 00:27:29,839 pues bueno, alumno 671 00:27:29,839 --> 00:27:31,779 a igual a, como no me he 672 00:27:31,779 --> 00:27:33,660 hecho constructor con 673 00:27:33,660 --> 00:27:35,799 parámetros, pues me lo va a hacer 674 00:27:35,799 --> 00:27:39,119 apunto, pues 675 00:27:39,119 --> 00:27:43,240 cuidado 676 00:27:43,240 --> 00:27:44,480 que es modelo2 677 00:27:44,480 --> 00:27:49,220 vale, pues apunto 678 00:27:49,220 --> 00:27:50,539 setNif 679 00:27:50,539 --> 00:27:52,980 igual a 1, 2, 3, 4 680 00:27:52,980 --> 00:27:55,200 vale 681 00:27:55,200 --> 00:27:57,299 el nombre me da lo mismo 682 00:27:57,299 --> 00:27:59,099 y ahora 683 00:27:59,099 --> 00:28:00,660 yo aquí haría, pues venga 684 00:28:00,660 --> 00:28:01,859 a mis alumnos 685 00:28:01,859 --> 00:28:04,779 le añado mi alumno a 686 00:28:04,779 --> 00:28:07,019 estoy trabajando con una lista como siempre 687 00:28:07,019 --> 00:28:08,339 vale 688 00:28:08,339 --> 00:28:10,460 todo esto que tengo aquí lo quito 689 00:28:10,460 --> 00:28:13,319 vale, imaginaos 690 00:28:13,319 --> 00:28:15,119 que he añadido unos cuantos más 691 00:28:15,119 --> 00:28:18,210 vale, entonces ahora 692 00:28:18,210 --> 00:28:20,109 yo quiero encontrar 693 00:28:20,109 --> 00:28:22,769 al alumno 1, 2, 3 y 4 694 00:28:22,769 --> 00:28:24,210 con clave 1, 2, 3 y 4 695 00:28:24,210 --> 00:28:26,029 con nif, perdón, para darle una nota 696 00:28:26,029 --> 00:28:28,970 aquí en el caso de la lista 697 00:28:28,970 --> 00:28:30,970 pues se me complica 698 00:28:30,970 --> 00:28:32,769 porque tengo que recorrerla 699 00:28:32,769 --> 00:28:34,869 y tengo que recorrerla y hacer 700 00:28:34,869 --> 00:28:37,089 para cada alumno a 701 00:28:37,089 --> 00:28:38,769 en alumnos 702 00:28:39,309 --> 00:28:40,970 pues ahora ya sí 703 00:28:40,970 --> 00:28:42,769 si a.get 704 00:28:43,410 --> 00:28:44,029 nif 705 00:28:44,029 --> 00:28:46,309 resulta que es igual 706 00:28:46,309 --> 00:28:48,890 al 1, 2, 3, 4 707 00:28:48,890 --> 00:28:50,930 o al que sea que yo esté buscando 708 00:28:50,930 --> 00:28:53,069 o al que sea que yo esté buscando 709 00:28:53,069 --> 00:28:54,269 ¡Ah! Ya lo he encontrado. 710 00:28:55,130 --> 00:28:56,710 Entonces ahora ya ponle la nota 711 00:28:56,710 --> 00:28:58,069 o ponle lo que quieras. 712 00:28:58,809 --> 00:28:59,769 Venga, un 7. 713 00:29:00,789 --> 00:29:05,519 ¿Vale? Luego, si tenemos 714 00:29:05,519 --> 00:29:07,839 una lista y yo quiero encontrar 715 00:29:07,839 --> 00:29:09,839 al alumno con un NIF en particular 716 00:29:09,839 --> 00:29:11,140 para 717 00:29:11,140 --> 00:29:13,640 hacerle algo, tengo que recorrer 718 00:29:13,640 --> 00:29:15,440 la lista. Tengo que recorrerla. 719 00:29:16,339 --> 00:29:17,380 O tirar del 720 00:29:17,380 --> 00:29:19,420 Index of, que es una línea muy larga, 721 00:29:20,019 --> 00:29:22,460 un alumno index of igual a esto, 722 00:29:22,579 --> 00:29:23,819 y ahora ya con esta posición, 723 00:29:24,000 --> 00:29:25,980 vete a la lista y sácamelo por esta posición, 724 00:29:26,700 --> 00:29:27,859 ese chorizo que pusimos. 725 00:29:28,339 --> 00:29:29,539 En cualquier caso es más complicado. 726 00:29:30,279 --> 00:29:30,420 ¿Vale? 727 00:29:30,500 --> 00:29:33,200 Para encontrar en la lista el alumno 728 00:29:33,200 --> 00:29:35,119 cuya clave primaria es una, 729 00:29:35,259 --> 00:29:36,240 tengo que recorrerla. 730 00:29:36,640 --> 00:29:37,480 Tengo que recorrerla. 731 00:29:37,619 --> 00:29:38,799 O yo o el index of, 732 00:29:38,859 --> 00:29:39,680 pero la tengo que recorrer. 733 00:29:41,000 --> 00:29:41,400 ¿Vale? 734 00:29:41,880 --> 00:29:43,980 Con la estructura de mapa que he hecho, 735 00:29:44,240 --> 00:29:45,779 me he ahorrado este recorrido. 736 00:29:45,779 --> 00:29:48,579 con la estructura de mapa me he ahorrado esto 737 00:29:48,579 --> 00:29:50,519 con la estructura de mapa 738 00:29:50,519 --> 00:29:52,599 que yo quiero el 1, 2, 3, 4 739 00:29:52,599 --> 00:29:53,759 get 1, 2, 3, 4 740 00:29:53,759 --> 00:29:55,740 que quiero el 5, 6, 7, 8 741 00:29:55,740 --> 00:29:57,000 get 5, 6, 7, 8 742 00:29:57,000 --> 00:29:59,460 recupero por clave automáticamente 743 00:29:59,460 --> 00:30:01,619 y ya con ese alumno recuperado 744 00:30:01,619 --> 00:30:03,599 hago lo que quiera hacer 745 00:30:03,599 --> 00:30:05,200 ¿vale? 746 00:30:06,579 --> 00:30:08,339 esa es la ventaja 747 00:30:08,339 --> 00:30:10,359 la motivación de usar un map 748 00:30:10,359 --> 00:30:11,480 en lugar de un conjunto 749 00:30:11,480 --> 00:30:14,079 el tenerlos identificados por una clave 750 00:30:14,079 --> 00:30:16,640 y ya lo recupero sin tener que iterar 751 00:30:16,640 --> 00:30:17,660 hasta encontrarlo 752 00:30:17,660 --> 00:30:20,019 ¿vale? esa es la ventaja 753 00:30:20,019 --> 00:30:31,990 entonces, ¿significa 754 00:30:31,990 --> 00:30:33,970 eso que yo si trabajo con un map 755 00:30:33,970 --> 00:30:35,769 ya en mi alumno 756 00:30:35,769 --> 00:30:37,390 ¿para qué ponerle el nif ahí 757 00:30:37,390 --> 00:30:40,049 si total ya está 758 00:30:40,049 --> 00:30:42,150 en la clave? hombre, aún así 759 00:30:42,150 --> 00:30:44,130 es recomendable ponerle aquí también 760 00:30:44,130 --> 00:30:45,849 y me diríais 761 00:30:45,849 --> 00:30:47,349 la información la tengo duplicada 762 00:30:47,349 --> 00:30:48,829 no pasa nada 763 00:30:48,829 --> 00:30:52,049 porque tenerla en la clave 764 00:30:52,049 --> 00:30:53,809 es para facilitarte los borrados 765 00:30:53,809 --> 00:30:54,809 y las recuperaciones 766 00:30:54,809 --> 00:30:57,329 pero está muy bien que el objeto lo tenga todo dentro 767 00:30:57,329 --> 00:30:59,329 lo que pasa es que tú además 768 00:30:59,329 --> 00:31:01,650 lo extraes, lo duplicas en una clave 769 00:31:01,650 --> 00:31:03,930 para facilitar el recuperar 770 00:31:03,930 --> 00:31:05,670 y el borrar y todo eso que veremos luego 771 00:31:05,670 --> 00:31:08,250 lo de duplicarlo 772 00:31:08,250 --> 00:31:10,109 es para facilitarte los accesos 773 00:31:10,109 --> 00:31:11,869 entonces repito, aún así 774 00:31:11,869 --> 00:31:14,269 aunque en el modelo 2 que hemos visto 775 00:31:14,269 --> 00:31:16,349 el meter la clave 776 00:31:16,349 --> 00:31:17,890 en el alumno no haría falta 777 00:31:17,890 --> 00:31:19,569 porque está aquí asociado en el par 778 00:31:19,569 --> 00:31:22,470 pues hombre, no es mala idea que esté siempre aquí 779 00:31:22,470 --> 00:31:23,730 esa información también 780 00:31:23,730 --> 00:31:26,029 que esté siempre aquí 781 00:31:26,029 --> 00:31:28,710 no sería mala idea que esté aquí 782 00:31:28,710 --> 00:31:30,990 ¿por qué? porque este objeto alumno 783 00:31:30,990 --> 00:31:33,289 a lo mejor luego se usa en otros sitios 784 00:31:33,289 --> 00:31:40,319 ¿vale? a lo mejor este objeto alumno se usa en otros sitios 785 00:31:40,319 --> 00:31:42,859 y hombre, que esté completamente identificado 786 00:31:42,859 --> 00:31:45,660 que esté completamente identificado está muy bien 787 00:31:45,660 --> 00:31:48,200 vete a saber quién usa este alumno en otras partes de la aplicación 788 00:31:48,200 --> 00:31:49,319 su NIF tiene que tenerlo 789 00:31:49,319 --> 00:31:51,700 pero a la hora de trabajar con el map 790 00:31:51,700 --> 00:31:53,859 es verdad que se queda 791 00:31:53,859 --> 00:31:56,160 duplicado, se queda duplicada 792 00:31:56,160 --> 00:31:56,759 la información 793 00:31:56,759 --> 00:31:59,880 y claro, eso sí, tengo que 794 00:31:59,880 --> 00:32:01,720 garantizar yo por programa la coherencia 795 00:32:01,720 --> 00:32:03,900 el alumno que yo meta 796 00:32:03,900 --> 00:32:05,859 aquí, debo yo garantizar 797 00:32:05,859 --> 00:32:07,759 por programa, por código, ponérselo yo 798 00:32:07,759 --> 00:32:09,319 fijárselo que sumirse a este 799 00:32:09,319 --> 00:32:12,000 porque es que si no, el programa ya no tiene sentido 800 00:32:12,000 --> 00:32:13,099 no tendría sentido 801 00:32:13,099 --> 00:32:14,599 aunque, ¿vale? 802 00:32:15,779 --> 00:32:17,900 entonces, está bien que yo mantenga 803 00:32:17,900 --> 00:32:19,880 por código que yo garantice 804 00:32:19,880 --> 00:32:21,680 la coherencia de las dos 805 00:32:21,680 --> 00:32:23,779 informaciones, que garantice la coherencia 806 00:32:23,779 --> 00:32:25,660 de la clave del map 807 00:32:25,660 --> 00:32:27,359 con el NIF que está aquí dentro 808 00:32:27,359 --> 00:32:30,099 si no garantizo yo esa coherencia, luego la aplicación 809 00:32:30,099 --> 00:32:31,900 vete a saber qué cosas, qué resultados 810 00:32:31,900 --> 00:32:33,759 me da, que no me cuadran 811 00:32:33,759 --> 00:32:35,900 uy, no me cuadra, qué extraño, he buscado un alumno 812 00:32:35,900 --> 00:32:37,819 con NIF tal y resulta que me dice que tiene 813 00:32:37,819 --> 00:32:39,819 NIF no sé cuál, si yo que buscas otro 814 00:32:39,819 --> 00:32:41,960 bueno, yo tengo que garantizar esa coherencia 815 00:32:41,960 --> 00:32:42,940 por código, ¿vale? 816 00:32:44,339 --> 00:32:45,880 Entonces, que no 817 00:32:45,880 --> 00:32:47,740 se extrañe que la información está duplicada 818 00:32:47,740 --> 00:32:49,720 que esté duplicada, tiene sentido porque 819 00:32:49,720 --> 00:32:51,779 esta entidad le viene bien 820 00:32:51,779 --> 00:32:52,880 guardarlo todo dentro 821 00:32:52,880 --> 00:32:55,720 para otros usos, para otros métodos a los que se ha 822 00:32:55,720 --> 00:32:56,839 pasado, para lo que sea 823 00:32:56,839 --> 00:32:59,539 lo de que esté aquí fuera 824 00:32:59,539 --> 00:33:02,019 es para facilitar estas cosas 825 00:33:02,019 --> 00:33:03,880 y quien dice el get, dice el delete 826 00:33:03,880 --> 00:33:05,440 y dice otras cosas que se pueden hacer 827 00:33:05,440 --> 00:33:06,059 ¿vale? 828 00:33:07,900 --> 00:33:09,880 bueno, ¿queréis que paremos aquí?