1 00:00:02,009 --> 00:00:09,470 El map, ya sabemos lo que es, es una estructura de almacenamiento de datos donde cada dato es un par. 2 00:00:10,289 --> 00:00:15,130 Cada dato ahora tiene dos partes, ¿vale? Luego un map es un almacén de pares. 3 00:00:17,449 --> 00:00:24,750 Esas partes del par, uno es la clave y otro es el valor, así es como se llaman, ¿vale? Se llaman clave y valor. 4 00:00:24,750 --> 00:00:32,310 ¿Qué significan? Pues la clave se supone que se usa para identificar de forma única 5 00:00:32,310 --> 00:00:35,909 los verdaderos datos, que son los que están en los valores 6 00:00:35,909 --> 00:00:42,250 Luego los datos están en los valores, tienen cada uno de ellos un identificador único 7 00:00:42,250 --> 00:00:47,929 y ese identificador único en vez de guardarse dentro del propio valor, que puede guardarse dentro 8 00:00:47,929 --> 00:00:52,630 Pues además se saca fuera y se mete en la clave 9 00:00:52,630 --> 00:00:55,210 Luego el par está compuesto por esa clave 10 00:00:55,210 --> 00:00:56,609 Que identifica de forma única 11 00:00:56,609 --> 00:00:58,229 Y ya el dato en sí 12 00:00:58,229 --> 00:01:00,570 Puede tener dentro lo que sea 13 00:01:00,570 --> 00:01:02,549 Incluida la propia clave 14 00:01:02,549 --> 00:01:05,409 No pasa nada, incluida la propia clave 15 00:01:05,409 --> 00:01:06,989 Para que así esté más completo 16 00:01:06,989 --> 00:01:08,849 El conjunto de datos 17 00:01:08,849 --> 00:01:11,230 Estará más completo porque está todavía recogidito 18 00:01:11,230 --> 00:01:13,510 Pero para facilitar 19 00:01:13,510 --> 00:01:15,269 Luego ya la gestión, el recorrido 20 00:01:15,269 --> 00:01:16,230 Y todo eso del map 21 00:01:16,230 --> 00:01:18,609 Esa clave está puesta fuera 22 00:01:18,609 --> 00:01:19,290 Además 23 00:01:19,290 --> 00:01:23,810 en el par 24 00:01:23,810 --> 00:01:25,650 en el par del mal, vale, pues entonces 25 00:01:25,650 --> 00:01:27,750 vimos como se declaraba 26 00:01:27,750 --> 00:01:28,930 pues en este ejemplito 27 00:01:28,930 --> 00:01:32,329 esta es la interfaz que tiene varias implementaciones 28 00:01:32,329 --> 00:01:33,829 esta es una 29 00:01:33,829 --> 00:01:36,189 interpretación, pues la más 30 00:01:36,189 --> 00:01:36,849 habitual 31 00:01:36,849 --> 00:01:40,189 vale, entonces en esta implementación 32 00:01:40,189 --> 00:01:42,069 lo que dijimos ayer es 33 00:01:42,069 --> 00:01:43,209 que las claves 34 00:01:43,209 --> 00:01:45,569 se guardan en un hash set 35 00:01:45,569 --> 00:01:47,890 entonces, eso que 36 00:01:47,890 --> 00:01:49,650 implica? Bueno, pues que nosotros 37 00:01:49,650 --> 00:01:51,629 ya entonces tenemos conocimiento 38 00:01:51,629 --> 00:01:53,750 de que el map por dentro, cuando 39 00:01:53,750 --> 00:01:55,769 tenga que insertar, recuperar, hacer cosas, 40 00:01:55,950 --> 00:01:57,870 pues trabajará con un haset de claves. 41 00:01:58,890 --> 00:01:59,989 Y como nosotros sabemos 42 00:01:59,989 --> 00:02:01,890 que para que Java pueda 43 00:02:01,890 --> 00:02:03,950 trabajar correctamente con un haset, 44 00:02:04,689 --> 00:02:05,489 la clase 45 00:02:05,489 --> 00:02:07,950 a la que pertenecen los elementos de ese 46 00:02:07,950 --> 00:02:09,789 haset tiene que tener hasco de equals, 47 00:02:10,870 --> 00:02:11,669 porque si no, 48 00:02:11,789 --> 00:02:14,129 no va a comprobar correctamente su igualdad 49 00:02:14,129 --> 00:02:15,949 y eso es básico para poder trabajar 50 00:02:15,949 --> 00:02:18,289 con ese haset, pues como sabemos 51 00:02:18,289 --> 00:02:20,050 que todo lo que 52 00:02:20,050 --> 00:02:22,509 esté en un haset 53 00:02:22,509 --> 00:02:23,770 tiene que tener jasco de equals 54 00:02:23,770 --> 00:02:26,250 pues la clase a la que pertenecen las claves 55 00:02:26,250 --> 00:02:28,129 tenemos que asegurarnos de que 56 00:02:28,129 --> 00:02:30,030 tenga jasco de equals, ya está, es lo único 57 00:02:30,030 --> 00:02:32,150 que implica el haber decidido 58 00:02:32,150 --> 00:02:34,349 un hasmat como estructura 59 00:02:34,349 --> 00:02:35,569 para nuestro mac 60 00:02:35,569 --> 00:02:38,169 asegurarnos que esta clase de aquí 61 00:02:38,169 --> 00:02:40,150 tenga jasco de equals, en este ejemplito 62 00:02:40,150 --> 00:02:42,069 primero como string tiene jasco de equals 63 00:02:42,069 --> 00:02:44,250 pues ya está, no pasa nada 64 00:02:44,250 --> 00:02:47,469 Entonces, ¿qué vimos? Pues como 65 00:02:47,469 --> 00:02:49,810 Insertar pares 66 00:02:49,810 --> 00:02:51,490 Como insertar pares, put 67 00:02:51,490 --> 00:02:53,729 ¿Vale? Porque las colecciones 68 00:02:53,729 --> 00:02:55,189 Son para eso, para meter cosas 69 00:02:55,189 --> 00:02:57,289 Sacarlas, ver lo que hay 70 00:02:57,289 --> 00:02:59,430 Que ese es el recorrido o la consulta 71 00:02:59,430 --> 00:03:00,349 Y eliminarlas 72 00:03:00,349 --> 00:03:03,430 ¿Vale? Recordad que esas son las cuatro 73 00:03:03,430 --> 00:03:05,530 Acciones básicas que se pueden hacer 74 00:03:05,530 --> 00:03:06,430 Con los datos 75 00:03:06,430 --> 00:03:09,009 Con cualquier almacén de datos 76 00:03:09,009 --> 00:03:10,729 Me da igual que sea una base de datos 77 00:03:10,729 --> 00:03:13,289 Una colección que tengo yo en memoria 78 00:03:13,289 --> 00:03:15,330 en mi aplicación, con cualquier 79 00:03:15,330 --> 00:03:17,270 almacén de datos, esas son las únicas cuatro 80 00:03:17,270 --> 00:03:18,349 cosas que puedo hacer 81 00:03:18,349 --> 00:03:21,250 insertar 82 00:03:21,250 --> 00:03:25,180 consultar 83 00:03:25,180 --> 00:03:28,800 actualizar 84 00:03:28,800 --> 00:03:32,639 y borrar 85 00:03:32,639 --> 00:03:35,520 esas son las cuatro acciones 86 00:03:35,520 --> 00:03:37,000 que yo puedo hacer con cualquiera 87 00:03:37,000 --> 00:03:39,020 que tengo que poder hacer con cualquier almacén de datos 88 00:03:39,020 --> 00:03:40,960 y no necesito hacer ninguna otra 89 00:03:40,960 --> 00:03:43,560 ahora ya cualquier otra acción más compleja 90 00:03:43,560 --> 00:03:45,439 es una composición de cualquiera 91 00:03:45,439 --> 00:03:46,400 de ellas y ya está 92 00:03:46,400 --> 00:03:48,479 ¿Vale? Bueno, pues 93 00:03:48,479 --> 00:03:50,080 Insertar en un map 94 00:03:50,080 --> 00:03:52,360 Pues esto 95 00:03:52,360 --> 00:03:55,039 ¿Vale? Insertar en un map 96 00:03:55,039 --> 00:03:56,939 Entonces, este put ya sabemos que 97 00:03:56,939 --> 00:03:59,180 Si la clave no existe 98 00:03:59,180 --> 00:03:59,879 Inserta 99 00:03:59,879 --> 00:04:03,919 Pero si la clave existiera 100 00:04:03,919 --> 00:04:05,759 Se comporta como una 101 00:04:05,759 --> 00:04:07,580 Actualización, ¿vale? 102 00:04:07,740 --> 00:04:10,120 Si la clave existiera, se comporta como una 103 00:04:10,120 --> 00:04:11,199 Actualización 104 00:04:11,199 --> 00:04:16,170 ¿Qué más métodos vimos del map? 105 00:04:17,889 --> 00:04:18,529 Recuperar 106 00:04:18,529 --> 00:04:22,810 recuperar por clave 107 00:04:22,810 --> 00:04:23,069 ¿no? 108 00:04:24,189 --> 00:04:24,490 claro 109 00:04:24,490 --> 00:04:25,810 uy 110 00:04:25,810 --> 00:04:26,430 perdón 111 00:04:26,430 --> 00:04:28,410 vale 112 00:04:28,410 --> 00:04:29,529 pues este 113 00:04:29,529 --> 00:04:30,649 recuperar por clave 114 00:04:30,649 --> 00:04:34,920 entonces me devuelve 115 00:04:34,920 --> 00:04:35,939 el valor 116 00:04:35,939 --> 00:04:37,019 el objeto 117 00:04:37,019 --> 00:04:39,620 asociado a esta clave 118 00:04:39,620 --> 00:04:41,939 si es que existe 119 00:04:41,939 --> 00:04:42,600 si no existe 120 00:04:42,600 --> 00:04:43,420 me devuelve un nul 121 00:04:43,420 --> 00:04:44,120 y se acabó 122 00:04:44,120 --> 00:04:45,019 me devolverá nul 123 00:04:45,019 --> 00:04:47,060 ¿vale? 124 00:04:47,160 --> 00:04:48,220 entonces en este caso 125 00:04:48,220 --> 00:04:49,220 en este ejemplito 126 00:04:49,220 --> 00:04:50,600 pues 127 00:04:50,600 --> 00:04:52,480 este era el alumno 128 00:04:52,480 --> 00:04:54,079 asociado a esta clave 129 00:04:54,079 --> 00:04:56,279 que yo lo cojo directamente 130 00:04:56,279 --> 00:04:58,379 con un icoget y esa era la ventaja 131 00:04:58,379 --> 00:04:59,180 del map 132 00:04:59,180 --> 00:05:00,879 que 133 00:05:00,879 --> 00:05:04,300 es la que aporta respecto a la lista 134 00:05:04,300 --> 00:05:06,480 que yo quiero el alumno con un DNI 135 00:05:06,480 --> 00:05:08,339 siendo el DNI la clave 136 00:05:08,339 --> 00:05:09,519 me hago el get y ya está 137 00:05:09,519 --> 00:05:12,399 que esos alumnos están todos en una lista 138 00:05:12,399 --> 00:05:14,600 y necesito el alumno 139 00:05:14,600 --> 00:05:15,540 con ese DNI 140 00:05:15,540 --> 00:05:18,300 pues me tengo que meter en la lista 141 00:05:18,300 --> 00:05:20,100 recorrerla hasta que encuentro el alumno 142 00:05:20,100 --> 00:05:21,040 con ese DNI 143 00:05:21,040 --> 00:05:23,220 Entonces esto es 144 00:05:23,220 --> 00:05:24,920 Un acceso mucho más rápido 145 00:05:24,920 --> 00:05:26,639 Porque es directamente por la clave 146 00:05:26,639 --> 00:05:28,319 Gracias a que la he sacado fuera 147 00:05:28,319 --> 00:05:29,819 ¿Vale? 148 00:05:30,639 --> 00:05:31,079 Bueno 149 00:05:31,079 --> 00:05:35,920 Eliminar 150 00:05:35,920 --> 00:05:40,779 Pues eliminar 151 00:05:40,779 --> 00:05:43,360 Pues tendrá algún método para eliminar 152 00:05:43,360 --> 00:05:44,060 Lógicamente 153 00:05:44,060 --> 00:05:46,040 Vamos a ver que métodos tiene 154 00:05:46,040 --> 00:05:47,779 Map 155 00:05:47,779 --> 00:05:54,379 Para echarles un vistazo 156 00:05:54,379 --> 00:05:55,759 A ver como es el de eliminar 157 00:05:55,759 --> 00:05:57,360 ¿Vale? 158 00:05:57,360 --> 00:05:58,899 Pues map tiene 159 00:05:58,899 --> 00:06:01,240 Antes de que encontremos el de eliminar 160 00:06:01,240 --> 00:06:04,259 Pues fijaos, este clear tiene toda la pinta 161 00:06:04,259 --> 00:06:05,139 Por nombre 162 00:06:05,139 --> 00:06:07,879 Que limpia el map 163 00:06:07,879 --> 00:06:10,420 Lo deja vacío, borra todos los elementos 164 00:06:10,420 --> 00:06:11,819 Tiene pinta, ¿verdad? 165 00:06:11,879 --> 00:06:12,660 Es lo que dice aquí 166 00:06:12,660 --> 00:06:16,240 Borra todos los pares de este map 167 00:06:16,240 --> 00:06:18,660 El map estará vacío 168 00:06:18,660 --> 00:06:19,920 Que no null 169 00:06:19,920 --> 00:06:22,180 ¿Vale? El map se queda vacío 170 00:06:22,180 --> 00:06:24,300 Vale 171 00:06:24,300 --> 00:06:25,639 Entonces, bueno, aquí tiene 172 00:06:25,639 --> 00:06:27,879 más métodos, vamos a buscar el de 173 00:06:27,879 --> 00:06:29,759 borrar por clave 174 00:06:29,759 --> 00:06:31,259 porque este es el que borra a todos 175 00:06:31,259 --> 00:06:33,480 vale, pues si borra 176 00:06:33,480 --> 00:06:35,939 buscamos a ver como es el de, pues no, tiene toda la pinta 177 00:06:35,939 --> 00:06:36,660 de que es este 178 00:06:36,660 --> 00:06:41,360 ¿vale? veis es un método 179 00:06:41,360 --> 00:06:43,839 sobrecargado, tiene dos versiones 180 00:06:43,839 --> 00:06:45,660 borrar por clave 181 00:06:45,660 --> 00:06:47,139 este, el más sencillo 182 00:06:47,139 --> 00:06:48,379 borrar por clave 183 00:06:48,379 --> 00:06:50,660 borra el par 184 00:06:50,660 --> 00:06:53,439 borra el par de correspondiente 185 00:06:53,439 --> 00:06:55,079 a esta clave, si esta clave está 186 00:06:55,079 --> 00:06:56,180 ¿vale? 187 00:06:57,279 --> 00:07:00,300 Y si no está, pues no puede hacer nada, lógicamente. 188 00:07:01,300 --> 00:07:03,720 ¿Y qué te devuelve? 189 00:07:03,879 --> 00:07:06,480 Te devuelve el objeto borrado. 190 00:07:07,019 --> 00:07:08,019 Te lo devuelve, además. 191 00:07:08,500 --> 00:07:11,139 Tú lo puedes tirar a la basura o quedártelo para hacer algo. 192 00:07:11,639 --> 00:07:14,959 O sea, lo elimina del map y te lo da como valor de retorno. 193 00:07:15,259 --> 00:07:17,040 Pues yo qué sé, por si quieres hacer algo con él. 194 00:07:17,800 --> 00:07:20,899 Es como si fuera en la pila el pop que saca de la pila. 195 00:07:20,899 --> 00:07:25,079 Pero en este caso no sacas de la cima, sino que sacas por clave. 196 00:07:25,079 --> 00:07:27,120 si no existiera 197 00:07:27,120 --> 00:07:28,500 te devuelve un null 198 00:07:28,500 --> 00:07:31,779 eso que significa 199 00:07:31,779 --> 00:07:33,920 que este objeto 200 00:07:33,920 --> 00:07:36,779 nos vale para verificar 201 00:07:36,779 --> 00:07:38,420 si realmente se ha borrado 202 00:07:38,420 --> 00:07:39,560 un elemento o no se ha borrado 203 00:07:39,560 --> 00:07:42,560 si esto me devuelve null, no he hecho ningún 204 00:07:42,560 --> 00:07:43,860 borrado porque no existía 205 00:07:43,860 --> 00:07:46,779 si esto me devuelve diferente de null 206 00:07:46,779 --> 00:07:47,980 pues si, he hecho un borrado 207 00:07:47,980 --> 00:07:50,120 y además el objeto que he eliminado es 208 00:07:50,120 --> 00:07:52,980 este, el valor que he eliminado es ese 209 00:07:52,980 --> 00:07:56,339 no, no te muestra nada 210 00:07:56,339 --> 00:07:58,040 te lo devuelve con valor de retorno 211 00:07:58,040 --> 00:07:59,459 tú si lo recoges 212 00:07:59,459 --> 00:08:02,040 luego ya haces con él lo que quieras si quieres hacer algo 213 00:08:02,040 --> 00:08:03,420 si quieres hacer algo 214 00:08:03,420 --> 00:08:06,079 borrado ya se queda, es lo que se supone que para que 215 00:08:06,079 --> 00:08:06,740 llamamos a esto 216 00:08:06,740 --> 00:08:10,199 tiene otra variante aquí 217 00:08:10,199 --> 00:08:10,839 remove 218 00:08:10,839 --> 00:08:12,759 que esta 219 00:08:12,759 --> 00:08:15,800 te borra el elemento con esta clave 220 00:08:15,800 --> 00:08:18,100 pero solo si coincide con 221 00:08:18,100 --> 00:08:20,000 este valor, o sea es un 222 00:08:20,000 --> 00:08:21,680 remove un poco más extraño 223 00:08:21,680 --> 00:08:24,100 normalmente nosotros cuando queremos 224 00:08:24,100 --> 00:08:26,139 eliminar, queremos eliminar por clave y ya está 225 00:08:26,139 --> 00:08:28,800 Pero bueno, tiene esta otra versión 226 00:08:28,800 --> 00:08:29,259 El remove 227 00:08:29,259 --> 00:08:32,059 Que esto es lo que dice que hace 228 00:08:32,059 --> 00:08:34,539 Te borra el elemento con esta clave 229 00:08:34,539 --> 00:08:36,360 Pero solo te lo borra si es 230 00:08:36,360 --> 00:08:37,419 Igual 231 00:08:37,419 --> 00:08:39,200 A este 232 00:08:39,200 --> 00:08:41,700 Igual ya sabéis que significa 233 00:08:41,700 --> 00:08:44,039 Que la llamada al método equals de este objeto 234 00:08:44,039 --> 00:08:45,320 Pues te de 235 00:08:45,320 --> 00:08:47,740 Esto es lo que dice que hace 236 00:08:47,740 --> 00:08:49,159 Pero bueno, es otra versión de remove 237 00:08:49,159 --> 00:08:50,460 Pues yo que sé 238 00:08:50,460 --> 00:08:54,259 Si realmente lo encontró 239 00:08:54,259 --> 00:08:55,940 Y por tanto lo borró, te devuelve true 240 00:08:55,940 --> 00:08:56,700 Y si no, falso. 241 00:08:59,360 --> 00:09:04,419 Entonces, eliminar sería eso, ¿verdad? 242 00:09:08,210 --> 00:09:25,870 Luego que nosotros queremos eliminar por clave, pues nada, esto nos eliminaría, lógicamente, nos eliminaría el alumno con esta clave. 243 00:09:26,850 --> 00:09:32,690 Si yo quiero verificar si realmente lo he eliminado yo, lo he eliminado o no, pues podría hacer esto. 244 00:09:32,730 --> 00:09:33,409 por ejemplo 245 00:09:33,409 --> 00:09:37,190 si es diferente de null 246 00:09:37,190 --> 00:09:38,730 pues entonces 247 00:09:38,730 --> 00:09:43,500 alumno eliminado 248 00:09:43,500 --> 00:09:47,799 vale, por ejemplo 249 00:09:47,799 --> 00:09:49,340 así podría hacer un borrado 250 00:09:49,340 --> 00:09:51,659 por clave y además 251 00:09:51,659 --> 00:09:53,620 confirmar si se ha borrado 252 00:09:53,620 --> 00:09:55,779 algo o no, porque si esta clave 253 00:09:55,779 --> 00:09:57,379 no existiera pues no se ha borrado nada 254 00:09:57,379 --> 00:09:59,580 yo le doy al remove, confío en que se ha borrado 255 00:09:59,580 --> 00:10:01,980 pero no se ha borrado porque no existe 256 00:10:01,980 --> 00:10:03,820 entonces si yo quiero una realimentación 257 00:10:03,820 --> 00:10:04,559 quiero 258 00:10:04,559 --> 00:10:08,340 no, el true o false da cuando 259 00:10:08,340 --> 00:10:09,519 la otra versión de remove 260 00:10:09,519 --> 00:10:11,799 este te devuelve el objeto borrado 261 00:10:11,799 --> 00:10:14,320 yo aquí, el objeto borrado 262 00:10:14,320 --> 00:10:16,700 no me ha interesado cogerlo, pero si me ha interesado 263 00:10:16,700 --> 00:10:18,399 verificar que sea diferente de null 264 00:10:18,399 --> 00:10:19,980 solo eso, para 265 00:10:19,980 --> 00:10:22,500 dar una información sobre el ya borrado 266 00:10:22,500 --> 00:10:29,429 es que no devuelve 267 00:10:29,429 --> 00:10:31,629 este devuelve el objeto borrado 268 00:10:31,629 --> 00:10:34,450 pero con la exclamación 269 00:10:34,450 --> 00:10:34,590 ¿dónde? 270 00:10:34,590 --> 00:10:37,789 no, la exclamación 271 00:10:37,789 --> 00:10:38,889 solo la puedo poner 272 00:10:38,889 --> 00:10:40,090 si 273 00:10:40,090 --> 00:10:45,470 hombre 274 00:10:45,470 --> 00:10:47,169 a ver, si 275 00:10:47,169 --> 00:10:49,649 la JDK25 276 00:10:49,649 --> 00:10:51,649 permite que tú niegues algo 277 00:10:51,649 --> 00:10:53,750 que no sea boolean, espero que yo sepa 278 00:10:53,750 --> 00:10:57,169 no, pero 279 00:10:57,169 --> 00:10:59,570 no es necesario 280 00:10:59,570 --> 00:11:01,529 vamos, si es mucho más sencillo así 281 00:11:01,529 --> 00:11:03,450 a ver, quítate de la cabeza Python 282 00:11:03,450 --> 00:11:05,210 ya 283 00:11:05,210 --> 00:11:07,730 sí, pero hablo en general 284 00:11:07,730 --> 00:11:09,429 hablo en general porque 285 00:11:09,429 --> 00:11:12,190 Python juega usted también, lo que pasa es que bueno 286 00:11:12,190 --> 00:11:14,049 que C tiene la solera 287 00:11:14,049 --> 00:11:15,990 así hay que respetarle 288 00:11:15,990 --> 00:11:18,570 pero es verdad que Python en general 289 00:11:18,570 --> 00:11:19,870 tiene 290 00:11:19,870 --> 00:11:22,149 atajos para todo, facilidades 291 00:11:22,149 --> 00:11:24,090 para todo, todo y bueno, vale 292 00:11:24,090 --> 00:11:26,129 sí, eso en algunos contextos 293 00:11:26,129 --> 00:11:27,669 está bien, pero 294 00:11:27,669 --> 00:11:30,110 pero claro, Java es otro rollo 295 00:11:30,110 --> 00:11:31,649 aunque claro 296 00:11:31,649 --> 00:11:34,149 en cada versión que se hace de Java 297 00:11:34,149 --> 00:11:36,289 incorpora 3 o 4 chorraditas 298 00:11:36,289 --> 00:11:38,370 cada versión, hay algunas versiones 299 00:11:38,370 --> 00:11:39,549 que han sido las de toma 300 00:11:39,549 --> 00:11:41,889 menos mal que llegó porque lo ha cambiado todo 301 00:11:41,889 --> 00:11:44,509 Java 8 que incorporó toda la programación funcional 302 00:11:44,509 --> 00:11:46,309 luego no sé cuál 303 00:11:46,309 --> 00:11:47,730 Java 10 creo que fue módulo 304 00:11:47,730 --> 00:11:50,529 y luego al margen de las versiones 305 00:11:50,529 --> 00:11:51,690 que llegan y dicen toma 306 00:11:51,690 --> 00:11:53,710 que guay que ha incorporado todo esto 307 00:11:53,710 --> 00:11:56,549 luego cada versión pues incorpora chorraditas 308 00:11:56,549 --> 00:11:58,610 porque es normal, tienen que justificar su sueldo 309 00:11:58,610 --> 00:11:59,269 lógicamente 310 00:11:59,269 --> 00:12:02,149 entonces algunas de estas chorraditas 311 00:12:02,149 --> 00:12:03,950 pues van un poco en el sentido 312 00:12:03,950 --> 00:12:05,889 de hacer atajos, hacer pues como 313 00:12:05,889 --> 00:12:07,769 el main, acortar, pero cosas de esas 314 00:12:07,769 --> 00:12:09,330 ¿vale? entonces 315 00:12:09,330 --> 00:12:13,929 lo que pasa es que 316 00:12:13,929 --> 00:12:14,529 uy, nulo 317 00:12:14,529 --> 00:12:17,669 este atajo en particular 318 00:12:17,669 --> 00:12:20,129 se me haría a mí un poco feo 319 00:12:20,129 --> 00:12:22,269 no sé, que podría llegar contra la 320 00:12:22,269 --> 00:12:24,110 filosofía un poquito de 321 00:12:24,110 --> 00:12:25,250 lenguajes tipados 322 00:12:25,250 --> 00:12:27,950 ¿vale? el lenguaje es no, aunque C es tipado 323 00:12:27,950 --> 00:12:29,909 también, lenguajes no tipados, pues sí tiene 324 00:12:29,909 --> 00:12:32,090 sentido, pero en tipados, no sé, negar 325 00:12:32,090 --> 00:12:34,210 un valor que no sea boolean, es raro 326 00:12:34,210 --> 00:12:36,289 vale 327 00:12:36,289 --> 00:12:37,669 bueno, pues entonces 328 00:12:37,669 --> 00:12:44,169 ya está, eliminar 329 00:12:44,169 --> 00:12:46,169 entonces, ¿qué más cosas hemos dicho 330 00:12:46,169 --> 00:12:46,990 que tenía el CRUD? 331 00:12:48,230 --> 00:12:50,509 no hemos recorrido todavía para hacer consultas 332 00:12:50,509 --> 00:12:52,289 pues, actualizar 333 00:12:52,289 --> 00:12:54,409 actualizar 334 00:12:54,409 --> 00:12:56,230 hemos dicho que el PUT nos vale 335 00:12:56,230 --> 00:12:57,450 para actualizar 336 00:12:57,450 --> 00:13:04,259 el PUT nos vale 337 00:13:04,259 --> 00:13:07,620 pero cuidado porque el put no es una actualización solo 338 00:13:07,620 --> 00:13:09,779 es actualización o inserción 339 00:13:09,779 --> 00:13:13,580 entonces puede ser 340 00:13:13,580 --> 00:13:16,279 que yo necesite actualizar un dato 341 00:13:16,279 --> 00:13:18,740 si ese dato existe y si no existe 342 00:13:18,740 --> 00:13:22,379 pues no insertarlo de nuevas, solamente actualizar si existe 343 00:13:22,379 --> 00:13:24,519 entonces para eso el put no me valdría 344 00:13:24,519 --> 00:13:26,299 porque si yo hago esto 345 00:13:26,299 --> 00:13:30,860 si, esto me actualiza el alumno este de aquí 346 00:13:30,860 --> 00:13:32,179 pero si no existiera 347 00:13:32,179 --> 00:13:34,740 porque yo he escrito mal la clave 348 00:13:34,740 --> 00:13:36,820 y no existe, entonces yo no quiero 349 00:13:36,820 --> 00:13:38,960 que se meta uno nuevo con esa clave errónea 350 00:13:38,960 --> 00:13:40,139 no quiero que se meta uno nuevo 351 00:13:40,139 --> 00:13:42,379 entonces tiene sentido que exista un método 352 00:13:42,379 --> 00:13:43,320 que solamente 353 00:13:43,320 --> 00:13:46,539 actualice la clave que tú le das 354 00:13:46,539 --> 00:13:48,779 y si esa clave no exista, que no haga 355 00:13:48,779 --> 00:13:50,080 nada, que no haga nada 356 00:13:50,080 --> 00:13:52,919 vale, pues ese método existirá 357 00:13:52,919 --> 00:13:56,419 pues seguro, verdad 358 00:13:56,419 --> 00:13:58,620 como de costumbre 359 00:13:58,620 --> 00:14:00,519 si uno cuando desarrolla 360 00:14:00,519 --> 00:14:02,360 una librería 361 00:14:02,360 --> 00:14:03,840 escoge bien los nombres 362 00:14:03,840 --> 00:14:06,360 pues va a facilitar la vida al que lo busca 363 00:14:06,360 --> 00:14:08,120 nosotros vamos por aquí 364 00:14:08,120 --> 00:14:10,539 y rápidamente tendríamos que ver 365 00:14:10,539 --> 00:14:12,559 algo que tenga toda la pinta de que es eso 366 00:14:12,559 --> 00:14:14,340 y bueno 367 00:14:14,340 --> 00:14:16,080 nos suena 368 00:14:16,080 --> 00:14:17,500 a este, ¿verdad? 369 00:14:20,029 --> 00:14:22,370 nos suena a este por el nombre, porque está bien elegido 370 00:14:22,370 --> 00:14:24,289 pues este es el que 371 00:14:24,289 --> 00:14:28,529 el valor con esta clave 372 00:14:28,529 --> 00:14:30,830 te lo sustituye 373 00:14:30,830 --> 00:14:31,909 con este objeto 374 00:14:31,909 --> 00:14:33,830 si es que existe la clave 375 00:14:33,830 --> 00:14:35,429 Si no, no hace nada 376 00:14:35,429 --> 00:14:37,409 ¿Verdad? 377 00:14:37,409 --> 00:14:38,769 Te sustituye 378 00:14:38,769 --> 00:14:40,789 El valor de esa clave 379 00:14:40,789 --> 00:14:42,210 Solo si existe 380 00:14:42,210 --> 00:14:43,789 Si no, nada 381 00:14:43,789 --> 00:14:46,629 Con lo cual no es exactamente como el put 382 00:14:46,629 --> 00:14:48,309 Porque el put además te insertaría 383 00:14:48,309 --> 00:14:49,529 ¿Vale? 384 00:14:54,649 --> 00:14:55,850 ¿Vale? Y bueno 385 00:14:55,850 --> 00:14:57,649 Está sobrecargado 386 00:14:57,649 --> 00:14:58,710 Tiene dos 387 00:14:58,710 --> 00:15:02,110 Tiene otra versión aquí 388 00:15:02,110 --> 00:15:05,070 Que te sustituye 389 00:15:05,070 --> 00:15:07,070 El valor 390 00:15:07,070 --> 00:15:07,889 de esta clave 391 00:15:07,889 --> 00:15:09,850 el valor de esta clave 392 00:15:09,850 --> 00:15:12,309 pero solo si se corresponde con este 393 00:15:12,309 --> 00:15:14,710 es decir, si esta clave 394 00:15:14,710 --> 00:15:16,570 verifica que se corresponde 395 00:15:16,570 --> 00:15:18,730 con este valor, entonces te lo cambia 396 00:15:18,730 --> 00:15:20,730 a este otro, si no se corresponde 397 00:15:20,730 --> 00:15:21,509 con ese, pues no 398 00:15:21,509 --> 00:15:24,309 es como la otra versión del remove 399 00:15:24,309 --> 00:15:25,490 que le dabas dos parámetros 400 00:15:25,490 --> 00:15:28,549 si el valor asociado a la clave coincide 401 00:15:28,549 --> 00:15:29,649 te lo elimina, si no, no 402 00:15:29,649 --> 00:15:32,370 pues aquí, si el valor asociado a esta clave 403 00:15:32,370 --> 00:15:34,570 te coincide con este, te lo sustituye 404 00:15:34,570 --> 00:15:35,730 con el otro, si no, no 405 00:15:35,730 --> 00:15:39,179 ¿verdad que sí? 406 00:15:39,279 --> 00:17:07,210 Vale, ahora vamos a recorrer, actualizar, bueno, ahora lo más retorcidillo, vale, 407 00:17:07,769 --> 00:17:13,380 ¿Cómo que no es la misma? 408 00:17:16,980 --> 00:17:18,599 Bueno, a ver, he puesto una al azar 409 00:17:18,599 --> 00:17:19,960 Pues si no, entonces no hace nada 410 00:17:19,960 --> 00:17:21,259 Pero vamos, que el método es este 411 00:17:21,259 --> 00:17:23,440 ¿Vale? Es decir, el método es 412 00:17:23,440 --> 00:17:25,180 Si esta clave existiera, que no lo sé 413 00:17:25,180 --> 00:17:26,779 Te lo sustituye por este 414 00:17:26,779 --> 00:17:28,019 Y si no existe, nada 415 00:17:28,019 --> 00:17:30,420 No como el put, que sí que te inserta 416 00:17:30,420 --> 00:17:32,559 ¿Vale? Recorrer 417 00:17:32,559 --> 00:17:37,480 Para ver todo lo que hay 418 00:17:37,480 --> 00:17:41,460 Pues en realidad hay muchas formas 419 00:17:41,460 --> 00:17:44,460 Como uno se puede plantear recorrer 420 00:17:44,460 --> 00:17:44,839 ¿Vale? 421 00:17:47,049 --> 00:18:01,630 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. 422 00:18:01,630 --> 00:18:04,230 Bueno, pues hay varias posibilidades 423 00:18:04,230 --> 00:18:09,529 Usar unos métodos que te devuelven solo las claves 424 00:18:09,529 --> 00:18:10,970 O solo los valores 425 00:18:10,970 --> 00:18:12,470 Y recorrer eso 426 00:18:12,470 --> 00:18:16,759 Por ejemplo, podemos hacer esto 427 00:18:16,759 --> 00:18:24,019 Recorremos a partir del conjunto de claves 428 00:18:24,019 --> 00:18:29,079 Es decir, yo tengo mi map 429 00:18:29,079 --> 00:18:30,279 Alumnos 430 00:18:30,279 --> 00:18:34,339 Mi map tiene un método que se llama keyset 431 00:18:34,339 --> 00:18:35,420 ¿Vale? 432 00:18:35,980 --> 00:18:40,500 y key set me devuelve el conjunto de las claves. 433 00:18:41,500 --> 00:18:45,240 Entonces, por ejemplo, vamos a suponer que yo guardo aquí mi conjunto de claves. 434 00:18:56,660 --> 00:18:58,759 Vale, tengo aquí mi conjunto de claves. 435 00:18:59,299 --> 00:19:02,160 Y ahora ya, esto ya es un conjunto sencillo. 436 00:19:02,759 --> 00:19:05,680 Me puedo plantear recorrerlo, por ejemplo, así. 437 00:19:05,680 --> 00:19:36,000 Y el valor, ¿cuál sería? 438 00:19:36,500 --> 00:19:41,160 Alumnos.get key. 439 00:19:41,160 --> 00:19:46,960 bueno, pues con esto estoy recorriendo 440 00:19:46,960 --> 00:19:48,720 los dos elementos del map 441 00:19:48,720 --> 00:19:50,619 tengo aquí mi conjunto de claves 442 00:19:50,619 --> 00:19:51,559 recorro mis claves 443 00:19:51,559 --> 00:19:53,839 y en cada iteración 444 00:19:53,839 --> 00:19:56,180 en cada iteración tengo 445 00:19:56,180 --> 00:19:58,039 la clave 446 00:19:58,039 --> 00:19:59,819 y el valor 447 00:19:59,819 --> 00:20:02,660 si quiero, a partir de esa clave 448 00:20:02,660 --> 00:20:03,480 claro, con el get 449 00:20:03,480 --> 00:20:11,269 entonces esto al ser un set 450 00:20:11,269 --> 00:20:12,210 normal y corriente 451 00:20:12,210 --> 00:20:15,410 lo puedo recorrer con un for each, con un iterador 452 00:20:15,410 --> 00:20:17,210 pues como quiera 453 00:20:17,210 --> 00:20:18,210 yo recorrer un set 454 00:20:18,210 --> 00:20:20,849 Nunca con un for de índice, claro 455 00:20:20,849 --> 00:20:23,390 Porque los conjuntos no tienen posición, no están ordenados 456 00:20:23,390 --> 00:20:25,089 Bueno, pues esta es una posibilidad 457 00:20:25,089 --> 00:20:27,950 Me saco el conjunto de las claves 458 00:20:27,950 --> 00:20:29,289 Y ya con las claves 459 00:20:29,289 --> 00:20:31,430 Puedo recorrerlas para ver lo que tiene 460 00:20:31,430 --> 00:20:32,369 Lo que sea 461 00:20:32,369 --> 00:20:34,849 Esta es una posibilidad 462 00:20:34,849 --> 00:20:36,990 ¿Vale? 463 00:20:41,589 --> 00:20:43,289 Entonces, ¿que queremos solo los valores? 464 00:20:43,869 --> 00:20:44,630 Pues por ejemplo 465 00:20:44,630 --> 00:20:47,009 Yo que sé, solo los valores sin las claves 466 00:20:47,009 --> 00:20:48,789 Pues hay 467 00:20:48,789 --> 00:20:51,289 algún método por ahí que me saca los valores 468 00:20:51,289 --> 00:20:56,220 alumnos 469 00:20:56,220 --> 00:20:58,420 tiene un método 470 00:20:58,420 --> 00:21:00,519 values que me saca 471 00:21:00,519 --> 00:21:01,839 los valores 472 00:21:01,839 --> 00:21:02,859 vale 473 00:21:02,859 --> 00:21:05,619 en este caso 474 00:21:05,619 --> 00:21:24,160 dime un segundito 475 00:21:24,160 --> 00:21:29,609 vamos a ponerlo aquí 476 00:21:29,609 --> 00:21:30,309 me devuelve una 477 00:21:30,309 --> 00:21:33,509 una colección de los alumnos 478 00:21:33,509 --> 00:21:33,890 vale 479 00:21:33,890 --> 00:21:45,829 dime 480 00:21:45,829 --> 00:21:58,450 No sé qué set te devuelve 481 00:21:58,450 --> 00:21:59,589 Te devuelve un conjunto 482 00:21:59,589 --> 00:22:02,190 No sé si te devuelve un conjunto 483 00:22:02,190 --> 00:22:03,730 No sé qué tipo de conjunto es 484 00:22:03,730 --> 00:22:06,470 Pero no nos importa 485 00:22:06,470 --> 00:22:07,430 ¿Vale? 486 00:22:08,630 --> 00:22:10,630 Te devolverá, entiendo yo 487 00:22:10,630 --> 00:22:12,990 Que en función de 488 00:22:12,990 --> 00:22:14,410 Si es un HashMap 489 00:22:14,410 --> 00:22:16,109 Te devolverá un hash set con las claves 490 00:22:16,109 --> 00:22:17,829 Y si es un tree map 491 00:22:17,829 --> 00:22:19,930 Te devolverá un tree set, supongo 492 00:22:19,930 --> 00:22:21,569 Porque lo que hace el map 493 00:22:21,569 --> 00:22:23,349 Es guardar esto en un set 494 00:22:23,349 --> 00:22:24,430 Eso sí o sí 495 00:22:24,430 --> 00:22:28,349 ¿En qué set? Hash set si es hash map 496 00:22:28,349 --> 00:22:29,869 Tree set si es tree map 497 00:22:29,869 --> 00:22:31,630 Entonces entiendo que el set que te devuelve 498 00:22:31,630 --> 00:22:32,349 Tiene esa 499 00:22:32,349 --> 00:22:35,410 Ese también 500 00:22:35,410 --> 00:22:36,849 El linked hash set 501 00:22:36,849 --> 00:22:39,890 Que te devuelve un set con esa estructura 502 00:22:39,890 --> 00:22:40,549 Directamente 503 00:22:40,549 --> 00:22:43,609 Pero bueno, cual sea 504 00:22:43,609 --> 00:22:45,490 A la hora nosotros de recorrerla es que nos da igual 505 00:22:45,490 --> 00:22:47,470 En realidad, porque trabajamos 506 00:22:47,470 --> 00:22:48,509 Con todos los set igual 507 00:22:48,509 --> 00:22:52,650 Vale, entonces 508 00:22:52,650 --> 00:23:06,029 Vale, que queremos solo los valores 509 00:23:06,029 --> 00:23:08,369 Pues los podemos guardar aquí en una colección 510 00:23:08,369 --> 00:23:10,190 Y como podemos recorrer 511 00:23:10,190 --> 00:23:11,289 Cualquier colección 512 00:23:11,289 --> 00:23:13,630 Iterando, vale 513 00:23:13,630 --> 00:23:14,750 Pues entonces 514 00:23:14,750 --> 00:23:18,130 Pero vamos, recorrer solo los valores sin claves es más raro 515 00:23:18,130 --> 00:23:19,970 Pero bueno, no pasa nada 516 00:23:19,970 --> 00:23:21,549 O sea, esto lo podemos hacer 517 00:23:21,549 --> 00:23:29,089 Vale, punto 518 00:23:29,089 --> 00:23:30,549 Iterando 519 00:23:30,549 --> 00:23:36,019 entonces cualquier colección 520 00:23:36,019 --> 00:23:37,799 me da igual lo que me haya devuelto esto 521 00:23:37,799 --> 00:23:39,880 que no lo sé, no sé si me ha devuelto una lista 522 00:23:39,880 --> 00:23:42,039 un set, no sé que me ha devuelto 523 00:23:42,039 --> 00:23:43,740 pero me ha devuelto una colección 524 00:23:43,740 --> 00:23:46,000 sea list o sea set 525 00:23:46,000 --> 00:23:47,839 porque son las dos implementaciones de 526 00:23:47,839 --> 00:23:50,099 collective, sea la que sea 527 00:23:50,099 --> 00:23:52,220 se puede iterar con un iterador 528 00:23:52,220 --> 00:23:53,799 vale 529 00:23:53,799 --> 00:23:55,900 entonces yo ahora 530 00:23:55,900 --> 00:23:57,880 pues bueno, podría hacer esto y ya está 531 00:23:57,880 --> 00:24:13,049 bueno pues 532 00:24:13,049 --> 00:24:14,490 con esto estaría mostrando 533 00:24:14,490 --> 00:24:16,029 Solamente los valores 534 00:24:16,029 --> 00:24:18,589 ¿Vale? Otra posibilidad más 535 00:24:18,589 --> 00:24:20,170 Otra cosa, uno ya juega con esto 536 00:24:20,170 --> 00:24:22,369 Para hacer en la aplicación que sea lo que tenga que hacer 537 00:24:22,369 --> 00:24:24,589 Con esto estaríamos mostrando 538 00:24:24,589 --> 00:24:25,269 Solo los valores 539 00:24:25,269 --> 00:24:26,930 ¿Vale? 540 00:24:31,710 --> 00:24:33,569 Sí, claro, efectivamente, también 541 00:24:33,569 --> 00:24:36,049 Yo podría hacer un for each también, efectivamente 542 00:24:36,049 --> 00:24:36,829 ¿Vale? 543 00:24:44,420 --> 00:24:45,640 En values, perdón 544 00:24:45,640 --> 00:24:50,740 Cualquier colección es recorrible con un for each 545 00:24:50,740 --> 00:24:54,779 Claro, también, efectivamente 546 00:24:54,779 --> 00:24:58,220 el iterador pues tendría sentido 547 00:24:58,220 --> 00:24:59,700 si yo quisiera modificar 548 00:24:59,700 --> 00:25:01,339 esa colección dentro de 549 00:25:01,339 --> 00:25:07,829 vale 550 00:25:07,829 --> 00:25:10,750 pero luego a la hora de recorrer 551 00:25:10,750 --> 00:25:13,670 hay otra estructura muy interesante 552 00:25:13,670 --> 00:25:14,269 que es 553 00:25:14,269 --> 00:25:17,369 una vista que nosotros podemos hacer 554 00:25:17,369 --> 00:25:18,490 del map 555 00:25:18,490 --> 00:25:21,410 que engloba las dos cosas en un único objeto 556 00:25:21,410 --> 00:25:25,589 es decir, nuestro map 557 00:25:25,589 --> 00:25:26,230 es esto 558 00:25:26,230 --> 00:25:29,490 la complejidad que tiene es 559 00:25:29,490 --> 00:25:31,529 que cada elemento son dos cosas 560 00:25:31,529 --> 00:25:34,109 Eso es lo que nos ha complicado el recorrido 561 00:25:34,109 --> 00:25:35,769 Que o bien hemos sacado las claves 562 00:25:35,769 --> 00:25:37,710 Y hemos recorrido a través de las claves 563 00:25:37,710 --> 00:25:38,470 Sacando el valor 564 00:25:38,470 --> 00:25:40,250 O bien hemos sacado los valores 565 00:25:40,250 --> 00:25:41,349 Y hemos recorrido los valores 566 00:25:41,349 --> 00:25:42,990 A lo que nos ha complicado el recorrido 567 00:25:42,990 --> 00:25:44,890 Es que cada elemento son dos cosas 568 00:25:44,890 --> 00:25:48,710 Vale, pues esto se puede transformar 569 00:25:48,710 --> 00:25:51,009 A una cosa 570 00:25:51,009 --> 00:25:52,049 Que 571 00:25:52,049 --> 00:25:54,150 Lo que está 572 00:25:54,150 --> 00:25:56,750 Que envuelve en un único elemento cada par 573 00:25:56,750 --> 00:25:58,710 ¿Vale? 574 00:25:58,769 --> 00:26:01,509 Cada par se mete en un único elemento 575 00:26:01,509 --> 00:26:04,210 esta estructura 576 00:26:04,210 --> 00:26:05,769 es como si fuera una envolvente 577 00:26:05,769 --> 00:26:07,710 de esto, donde en cada 578 00:26:07,710 --> 00:26:09,750 posición suya mete 579 00:26:09,750 --> 00:26:11,890 las dos cosas, con lo cual se convierte 580 00:26:11,890 --> 00:26:13,769 ya en una estructura de elementos únicos 581 00:26:13,769 --> 00:26:15,869 aunque cada uno de ellos tiene dos cosas 582 00:26:15,869 --> 00:26:17,529 en realidad, tiene dos partes 583 00:26:17,529 --> 00:26:19,910 y esta estructura de elementos únicos 584 00:26:19,910 --> 00:26:21,990 uno ya lo recorre como cualquier colección 585 00:26:21,990 --> 00:26:23,950 con el for each, con el iterador, como quiera 586 00:26:23,950 --> 00:26:25,450 bueno, pues 587 00:26:25,450 --> 00:26:27,869 esta estructura es 588 00:26:27,869 --> 00:26:29,690 es map entry, se llama 589 00:26:29,690 --> 00:26:32,009 map entry, entonces map entry es como una especie 590 00:26:32,009 --> 00:26:33,430 de envolvente del map 591 00:26:33,430 --> 00:26:36,230 en realidad más que un envolvente 592 00:26:36,230 --> 00:26:36,990 es como una vista 593 00:26:36,990 --> 00:26:39,910 como una vista 594 00:26:39,910 --> 00:26:41,490 de una tabla de bases de datos 595 00:26:41,490 --> 00:26:43,529 aunque igual las vistas de las tablas y todo eso 596 00:26:43,529 --> 00:26:45,829 todavía no las habéis visto, imaginaos 597 00:26:45,829 --> 00:26:45,990 ¿no? 598 00:26:47,430 --> 00:26:49,809 vale, entonces una vista de cualquier 599 00:26:49,809 --> 00:26:51,390 cosa en informática 600 00:26:51,390 --> 00:26:52,930 una vista es 601 00:26:52,930 --> 00:26:54,809 una forma amable 602 00:26:54,809 --> 00:26:57,529 o transformada o tuneada 603 00:26:57,529 --> 00:26:58,789 de acceder a esos datos 604 00:26:58,789 --> 00:27:00,950 Uno en general cuando tiene unos datos 605 00:27:00,950 --> 00:27:03,410 Esos datos 606 00:27:03,410 --> 00:27:05,589 Como tienen que tener toda la información de su aplicación 607 00:27:05,589 --> 00:27:06,930 Pueden ser muy complejos 608 00:27:06,930 --> 00:27:09,569 Uno puede tener un modelo 609 00:27:09,569 --> 00:27:11,809 De 200 tablas 610 00:27:11,809 --> 00:27:13,150 Porque su aplicación 611 00:27:13,150 --> 00:27:14,390 Necesita un montón de datos 612 00:27:14,390 --> 00:27:17,509 Vale, entonces si mi aplicación 613 00:27:17,509 --> 00:27:18,670 Tiene que estar todo el rato 614 00:27:18,670 --> 00:27:21,390 Entreteniéndose, recorriendo 615 00:27:21,390 --> 00:27:23,069 Esas 200 tablas 616 00:27:23,069 --> 00:27:24,869 Buscando, sacando, etcétera 617 00:27:24,869 --> 00:27:25,769 Pues se va a volver loca 618 00:27:25,769 --> 00:27:34,650 Entonces, una vista es una especie de forma más amable, más sencilla de acceder a esas tablas 619 00:27:34,650 --> 00:27:38,789 Es decir, es una recomposición de esas tablas para que sean más manejables 620 00:27:38,789 --> 00:27:45,930 Por ejemplo, vosotros tenéis lógicamente vuestra base de datos de coches, ¿verdad? 621 00:27:47,269 --> 00:27:52,569 Claro, pues, ¿qué tendrá? Yo que sé cuántas tablas tiene, pues unas cuantas, cinco, seis, no lo sé 622 00:27:52,569 --> 00:27:56,109 entonces a lo mejor una parte de la aplicación 623 00:27:56,109 --> 00:27:57,289 una parte de la aplicación 624 00:27:57,289 --> 00:27:59,849 solamente trabaja con 625 00:27:59,849 --> 00:28:02,049 marcas, porque está cambiando 626 00:28:02,049 --> 00:28:04,170 marcas, actualizando marcas, una parte de la aplicación 627 00:28:04,170 --> 00:28:05,269 solo trabaja con las marcas 628 00:28:05,269 --> 00:28:07,869 entonces que necesidad le da a esa aplicación 629 00:28:07,869 --> 00:28:09,730 hacerle visible 630 00:28:09,730 --> 00:28:11,789 toda la tabla, porque le vamos a complicar 631 00:28:11,789 --> 00:28:13,769 la vida, porque tiene que ir distinguiendo que tabla 632 00:28:13,769 --> 00:28:15,390 le toca, etcétera, que necesidad 633 00:28:15,390 --> 00:28:17,890 pues hacemos una cosa que se llama vista 634 00:28:17,890 --> 00:28:19,750 entonces 635 00:28:19,750 --> 00:28:22,309 esa vista es como una especie de subconjunto 636 00:28:22,309 --> 00:28:23,750 de esa tablita pequeñito 637 00:28:23,750 --> 00:28:26,410 solo para esa parte 638 00:28:26,410 --> 00:28:28,089 de mi aplicación. Ese subconjunto 639 00:28:28,089 --> 00:28:29,849 puede ser la tabla coches 640 00:28:29,849 --> 00:28:32,410 solamente, porque eso es una vista 641 00:28:32,410 --> 00:28:34,130 que es una especie de subconjunto 642 00:28:34,130 --> 00:28:36,529 sencillito de mi base 643 00:28:36,529 --> 00:28:38,769 de datos, una especie de subconjunto sencillito 644 00:28:38,769 --> 00:28:40,410 que se quita todo lo que no usa 645 00:28:40,410 --> 00:28:42,509 y se queda solo con una parte. 646 00:28:43,250 --> 00:28:44,349 Y entonces, esta parte mía 647 00:28:44,349 --> 00:28:46,230 de la aplicación usa esa vista. 648 00:28:46,930 --> 00:28:48,609 Es la idea de lo que es una vista. 649 00:28:49,309 --> 00:28:50,390 ¿Realmente es una copia 650 00:28:50,390 --> 00:28:52,049 de la base de datos? ¿Es una copia 651 00:28:52,049 --> 00:28:54,109 de esa tabla en otro sitio, no 652 00:28:54,109 --> 00:28:56,430 no es una copia, es una especie 653 00:28:56,430 --> 00:28:58,089 de ventanita a eso 654 00:28:58,089 --> 00:28:59,950 ¿vale? esto es como 655 00:28:59,950 --> 00:29:02,250 nosotros pues tenemos en este cuarto 656 00:29:02,250 --> 00:29:03,990 lo de las vistas se usa mucho 657 00:29:03,990 --> 00:29:06,109 con textos, pues tenemos aquí en este aula un montón 658 00:29:06,109 --> 00:29:08,049 de mesas y una ventana 659 00:29:08,049 --> 00:29:08,990 corrida única 660 00:29:08,990 --> 00:29:12,390 entonces, el que viene a arreglar las mesas 661 00:29:12,390 --> 00:29:14,190 pues entra por 662 00:29:14,190 --> 00:29:16,049 esa ventana corrida única gigante 663 00:29:16,049 --> 00:29:17,210 y ve todas las mesas 664 00:29:17,210 --> 00:29:20,069 entonces tiene que buscar entre 665 00:29:20,069 --> 00:29:21,470 todas a ver cuál arregla 666 00:29:21,470 --> 00:29:25,950 ¿Cómo podríamos organizar esto con vistas? 667 00:29:26,269 --> 00:29:28,089 Pues en lugar de una ventana corrida gorda 668 00:29:28,089 --> 00:29:30,150 Hacer un montón de ventanitas 669 00:29:30,150 --> 00:29:31,150 Que serían las vistas 670 00:29:31,150 --> 00:29:33,789 Ventana 1, ventana 2, ventana 3 por separado 671 00:29:33,789 --> 00:29:35,970 La ventana 1 te lleva a la mesa 1 672 00:29:35,970 --> 00:29:36,970 Y ya está 673 00:29:36,970 --> 00:29:39,369 La ventana 2 o vista 2 674 00:29:39,369 --> 00:29:41,130 Te lleva a la mesa 3 y 4 675 00:29:41,130 --> 00:29:43,130 Entonces ahora 676 00:29:43,130 --> 00:29:45,549 Que un arreglador de mesas 677 00:29:45,549 --> 00:29:48,029 Solo va a trabajar con la mesa 1 678 00:29:48,029 --> 00:29:49,430 Porque es la única que tiene asignada 679 00:29:49,430 --> 00:29:52,410 entra a través de la ventana 1 680 00:29:52,410 --> 00:29:53,049 y ya está. 681 00:29:53,789 --> 00:29:55,170 Pues la ventana sería la vista, 682 00:29:55,569 --> 00:29:57,029 que es ese acceso 683 00:29:57,029 --> 00:30:00,549 que tiene hacia la única parte 684 00:30:00,549 --> 00:30:02,950 de la base de datos que le interesa. 685 00:30:03,750 --> 00:30:04,769 Entonces es mucho más sencillo 686 00:30:04,769 --> 00:30:05,910 para el arreglador de mesas 687 00:30:05,910 --> 00:30:08,569 entrar por la ventana que le corresponde, 688 00:30:08,630 --> 00:30:09,390 que sería la vista, 689 00:30:09,630 --> 00:30:10,730 porque lo único que va a ver 690 00:30:10,730 --> 00:30:11,589 es la mesa que le toca, 691 00:30:11,730 --> 00:30:12,250 no va a haber más, 692 00:30:12,349 --> 00:30:13,230 entonces no tiene que elegir. 693 00:30:14,589 --> 00:30:16,549 Entonces, a través de la vista 694 00:30:16,549 --> 00:30:18,650 se accede al objeto real. 695 00:30:18,650 --> 00:30:24,630 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. 696 00:30:24,950 --> 00:30:26,910 ¿Te hago una copia de la mesa 2 y 3? No, no, no. 697 00:30:27,430 --> 00:30:33,410 El arreglador de mesas trabaja con la mesa real, pero ha entrado a través de un caminito especial para él, 698 00:30:33,589 --> 00:30:38,369 de un camino especial para él que le ha hecho poder olvidarse de todo el resto de cosas. 699 00:30:39,289 --> 00:30:41,029 Pues es una vista, ¿vale? 700 00:30:42,289 --> 00:30:47,289 Bueno, pues el Map Entry es como si fuera una vista distinta del Map, 701 00:30:47,289 --> 00:30:49,829 que es una vista en la cual 702 00:30:49,829 --> 00:30:52,009 yo en lugar de ver los dos elementos 703 00:30:52,009 --> 00:30:54,190 por separado, veo un único 704 00:30:54,190 --> 00:30:56,329 elemento que los tiene dentro los dos 705 00:30:56,329 --> 00:30:58,789 ¿qué gano con eso? 706 00:30:58,950 --> 00:31:00,430 pues que pueda hacer recorridos 707 00:31:00,430 --> 00:31:02,309 como hago 708 00:31:02,309 --> 00:31:04,390 con los list y los set, porque esto es una colección 709 00:31:04,390 --> 00:31:06,130 de elementos únicos, gano eso 710 00:31:06,130 --> 00:31:06,589 en realidad 711 00:31:06,589 --> 00:31:09,089 entonces 712 00:31:09,089 --> 00:31:12,269 pero lo que es importante es que entendamos 713 00:31:12,269 --> 00:31:14,309 que es una vista, luego al ser 714 00:31:14,309 --> 00:31:16,269 una vista, si yo hago modificaciones 715 00:31:16,269 --> 00:31:18,569 aquí, las estoy haciendo 716 00:31:18,569 --> 00:31:19,589 en el map original 717 00:31:19,589 --> 00:31:22,049 porque esto no es que yo haga una copia 718 00:31:22,049 --> 00:31:24,609 con los datos metiditos en objetos únicos 719 00:31:24,609 --> 00:31:25,789 no hago una copia 720 00:31:25,789 --> 00:31:28,029 hago una especie de ventanita 721 00:31:28,029 --> 00:31:30,309 a través de la cual yo entro 722 00:31:30,309 --> 00:31:32,509 a los dos, pero entro 723 00:31:32,509 --> 00:31:34,390 mirándolos como si fuera 724 00:31:34,390 --> 00:31:36,470 una estructura única, pero si yo modifico 725 00:31:36,470 --> 00:31:38,289 aquí, modifico estos en realidad 726 00:31:38,289 --> 00:31:39,829 es una vista, vale 727 00:31:39,829 --> 00:31:42,309 bueno, pues como declaramos 728 00:31:42,309 --> 00:31:44,130 el map entry este de aquí 729 00:31:44,130 --> 00:31:51,980 mediante map 730 00:31:51,980 --> 00:31:54,980 vale 731 00:31:54,980 --> 00:31:58,079 entonces las vistas son estructurales 732 00:31:58,079 --> 00:32:00,000 lo que pasa es que claro, en función del contexto 733 00:32:00,000 --> 00:32:02,119 en el que uno esté, bases de datos, programación 734 00:32:02,119 --> 00:32:04,079 administración de sistemas 735 00:32:04,079 --> 00:32:05,859 lo que sea, pues lógicamente 736 00:32:05,859 --> 00:32:07,740 se concretan de una manera o de otra 737 00:32:07,740 --> 00:32:10,019 pero la vista es un elemento básico 738 00:32:10,019 --> 00:32:11,660 en informática, vale 739 00:32:11,660 --> 00:32:13,240 que es, te voy a 740 00:32:13,240 --> 00:32:15,960 mostrar esto a mi manera 741 00:32:15,960 --> 00:32:18,180 para facilitarte el acceso 742 00:32:18,180 --> 00:32:20,240 Lo voy a mostrar de una manera modificada 743 00:32:20,240 --> 00:32:22,480 Bueno, pues el map entry 744 00:32:22,480 --> 00:32:24,980 El map entry 745 00:32:24,980 --> 00:32:26,960 Este 746 00:32:26,960 --> 00:32:29,259 ¿Cómo obtenemos esa colección 747 00:32:29,259 --> 00:32:30,460 De map entries? 748 00:32:30,539 --> 00:32:31,960 Pues en mi colección alumnos 749 00:32:31,960 --> 00:32:33,920 Uy, a que la escribo yo aquí 750 00:32:33,920 --> 00:32:38,319 Tenemos un método 751 00:32:38,319 --> 00:32:40,160 Que es el entry set 752 00:32:40,160 --> 00:32:41,319 ¿Vale? 753 00:32:41,799 --> 00:32:46,160 Entonces, el entry set 754 00:32:46,160 --> 00:32:47,259 Nos devuelve 755 00:32:47,259 --> 00:32:49,299 Una colección única 756 00:32:49,299 --> 00:32:51,460 Que va a ser un conjunto 757 00:32:51,460 --> 00:32:58,730 Y este conjunto 758 00:32:58,730 --> 00:32:59,809 ¿De qué va a ser? 759 00:33:00,250 --> 00:33:02,589 De elementos map entry, de esos que os he dicho 760 00:33:02,589 --> 00:33:07,200 De elementos map entry 761 00:33:07,200 --> 00:33:08,900 Que cada uno de ellos es 762 00:33:08,900 --> 00:33:09,740 De string 763 00:33:09,740 --> 00:33:12,440 Y alumno, en este caso 764 00:33:12,440 --> 00:33:23,809 Vale, esta es mi vista 765 00:33:23,809 --> 00:33:26,730 Mi vista es un único conjunto, colección única 766 00:33:26,730 --> 00:33:27,230 ¿De qué? 767 00:33:27,730 --> 00:33:29,690 De un montón de elementos de esta clase 768 00:33:29,690 --> 00:33:32,250 Y cada uno de estos elementos 769 00:33:32,250 --> 00:33:33,750 Tiene dentro 770 00:33:33,750 --> 00:33:36,349 Ahora ya, la clave por un lado 771 00:33:36,349 --> 00:33:37,210 Y el valor por otro 772 00:33:37,210 --> 00:33:40,369 vale 773 00:33:40,369 --> 00:33:43,450 entonces, esta ya la podemos recorrer 774 00:33:43,450 --> 00:33:45,049 como recorreríamos cualquier colección 775 00:33:45,049 --> 00:33:47,369 sacando un iterador con un for each 776 00:33:47,369 --> 00:33:48,950 como recorreríamos cualquier set 777 00:33:48,950 --> 00:33:51,470 por ejemplo, si la recorremos con un for each 778 00:33:51,470 --> 00:33:53,450 pues para cada elemento 779 00:33:53,450 --> 00:33:55,549 de estos, para cada elemento 780 00:33:55,549 --> 00:33:57,450 de estos, que envuelve 781 00:33:57,450 --> 00:34:02,009 un par dentro 782 00:34:02,009 --> 00:34:02,930 de mi vista 783 00:34:02,930 --> 00:34:08,559 pues yo ahora aquí, este tiene 784 00:34:08,559 --> 00:34:10,659 dentro, tanto la clave 785 00:34:10,659 --> 00:34:13,760 que la saco con get key 786 00:34:13,760 --> 00:34:16,139 Como el valor 787 00:34:16,139 --> 00:34:21,619 Que lo puedo sacar con getValue 788 00:34:21,619 --> 00:34:32,260 ¿Vale? Entonces 789 00:34:32,260 --> 00:34:34,460 Este objeto es de esta clase 790 00:34:34,460 --> 00:34:36,800 Que me envuelve 791 00:34:36,800 --> 00:34:37,980 A los otros dos 792 00:34:37,980 --> 00:34:40,340 Y los puedo sacar de ese envoltorio 793 00:34:40,340 --> 00:34:42,699 Con getKey la clave, getValue el valor 794 00:34:42,699 --> 00:34:44,300 Lo que yo necesite sacar 795 00:34:44,300 --> 00:34:45,920 ¿Vale? 796 00:34:46,840 --> 00:34:48,599 Y la colección de estos 797 00:34:48,599 --> 00:34:49,719 Elementos únicos 798 00:34:49,719 --> 00:34:52,579 La obtengo con el método entrySet 799 00:34:52,579 --> 00:34:53,820 Y ya está 800 00:34:53,820 --> 00:35:00,050 vale, pues vamos a parar aquí