1 00:00:00,110 --> 00:00:02,009 vale 2 00:00:02,009 --> 00:00:04,269 por último 3 00:00:04,269 --> 00:00:06,349 en cuanto a las listas 4 00:00:06,349 --> 00:00:08,410 precisamente en relación a la posición 5 00:00:08,410 --> 00:00:11,009 tenemos este método 6 00:00:11,009 --> 00:00:12,730 que es estupendo 7 00:00:12,730 --> 00:00:14,869 que es el método short 8 00:00:14,869 --> 00:00:15,769 vale 9 00:00:15,769 --> 00:00:18,489 claro, el método short 10 00:00:18,489 --> 00:00:20,370 como bien sabéis 11 00:00:20,370 --> 00:00:21,489 los que habláis inglés 12 00:00:21,489 --> 00:00:23,309 porque ya del resto ya pasamos 13 00:00:23,309 --> 00:00:27,789 del método short 14 00:00:27,789 --> 00:00:31,949 silencio 15 00:00:31,949 --> 00:00:34,289 que hace el método 16 00:00:34,289 --> 00:00:35,289 Jesús 17 00:00:35,289 --> 00:00:38,030 eso mire 18 00:00:38,030 --> 00:00:39,909 que hace el método short 19 00:00:39,909 --> 00:00:41,530 pues como bien dice su nombre 20 00:00:41,530 --> 00:00:43,990 David se te ha tirado una vez 21 00:00:43,990 --> 00:00:45,490 como bien dice su nombre 22 00:00:45,490 --> 00:00:46,649 ordena 23 00:00:46,649 --> 00:00:48,750 pero repito 24 00:00:48,750 --> 00:00:50,770 Juanjo cállate, callaos todos 25 00:00:50,770 --> 00:00:52,750 hablad por señas, whatsappearos 26 00:00:52,750 --> 00:00:54,130 algo que no haga ruido 27 00:00:54,130 --> 00:00:55,670 cualquier cosa 28 00:00:55,670 --> 00:00:58,810 pues los ruidos cuando hablo, sí 29 00:00:58,810 --> 00:01:03,149 el sonido de fondo hablando 30 00:01:03,149 --> 00:01:06,890 os oigo a todos 31 00:01:06,890 --> 00:01:07,890 bla bla bla bla bla 32 00:01:07,890 --> 00:01:11,890 también oigo a Gonzalo 33 00:01:11,890 --> 00:01:12,989 bla bla bla bla bla 34 00:01:12,989 --> 00:01:14,209 con Pablo 35 00:01:14,209 --> 00:01:19,170 silencio 36 00:01:19,170 --> 00:01:21,349 pues los oigo a todos 37 00:01:21,349 --> 00:01:23,030 vale, a ver, ordenar 38 00:01:23,030 --> 00:01:24,689 ordenar implica 39 00:01:24,689 --> 00:01:26,950 un criterio de ordenación, ¿no? 40 00:01:27,450 --> 00:01:29,030 Oye, ¿y según qué criterio de ordenación 41 00:01:29,030 --> 00:01:31,030 me quieres ordenar? Este huequito 42 00:01:31,030 --> 00:01:32,930 está para darles 43 00:01:32,930 --> 00:01:33,870 criterios de ordenación. 44 00:01:34,609 --> 00:01:36,810 Pero no lo vamos a meter ahora todavía 45 00:01:36,810 --> 00:01:38,909 a darle criterio de ordenación, porque 46 00:01:38,909 --> 00:01:40,530 vamos a 47 00:01:40,530 --> 00:01:43,129 aligerar un poco de cara al examen. 48 00:01:43,269 --> 00:01:44,989 Entonces, no le voy a dar un criterio de ordenación, 49 00:01:44,989 --> 00:01:46,209 con lo cual le pongo null. 50 00:01:47,590 --> 00:01:49,230 Tranquilo, que te puede la ansiedad. 51 00:01:49,450 --> 00:01:49,890 Relájate. 52 00:01:49,890 --> 00:01:55,790 cuando tiene sentido que yo meta aquí un criterio de ordenación 53 00:01:55,790 --> 00:01:58,909 cuando los objetos que están en la colección 54 00:01:58,909 --> 00:02:01,049 no lo tienen ellos mismos 55 00:02:01,049 --> 00:02:05,409 porque si el objeto de la colección 56 00:02:05,409 --> 00:02:06,810 que pide ser ordenada 57 00:02:06,810 --> 00:02:09,409 tiene ya dentro de él su criterio de ordenación 58 00:02:09,409 --> 00:02:11,310 yo no se lo tengo que dar al método 59 00:02:11,310 --> 00:02:16,150 si no lo tuviera dentro de él se lo tengo que dar 60 00:02:16,150 --> 00:02:18,270 vale, pedidos uno 61 00:02:18,270 --> 00:02:20,110 puede tenerlo dentro de él 62 00:02:20,110 --> 00:02:22,990 y cuando digo dentro de él digo aquí si yo se lo doy 63 00:02:22,990 --> 00:02:23,689 hay un método 64 00:02:23,689 --> 00:02:26,590 que puedas crear dentro de pedidos 65 00:02:26,590 --> 00:02:27,090 a ver 66 00:02:27,090 --> 00:02:29,650 para que sea un criterio de ordenación 67 00:02:29,650 --> 00:02:31,250 claro, a ver 68 00:02:31,250 --> 00:02:34,189 hay dos cosas distintas 69 00:02:34,189 --> 00:02:36,870 pedido, pedido tiene criterio de igualdad 70 00:02:36,870 --> 00:02:37,490 eso está claro 71 00:02:37,490 --> 00:02:41,129 tiene criterio para saber si yo soy igual a otro 72 00:02:41,129 --> 00:02:42,629 pero no tiene criterio 73 00:02:42,629 --> 00:02:44,590 para saber si yo voy antes 74 00:02:44,590 --> 00:02:46,110 que otro o después que otro 75 00:02:46,110 --> 00:02:48,129 ese no, el criterio de ordenación no lo tiene 76 00:02:48,129 --> 00:02:50,069 si yo se lo quiero dar 77 00:02:50,069 --> 00:02:52,530 se lo tendré que meter aquí dentro 78 00:02:52,530 --> 00:02:54,430 igual que le he metido el criterio de igualdad 79 00:02:54,430 --> 00:02:55,830 ahí dentro, en la clase pedido 80 00:02:55,830 --> 00:02:58,310 igual que le he metido el criterio para que un objeto 81 00:02:58,310 --> 00:02:59,830 pedido sepa si es igual a otro 82 00:02:59,830 --> 00:03:02,250 pues si quiero meter el criterio para que un objeto 83 00:03:02,250 --> 00:03:03,530 pedido sepa si es 84 00:03:03,530 --> 00:03:06,210 si va antes que otro o después que otro 85 00:03:06,210 --> 00:03:07,830 se lo tengo que pedir aquí, que meter aquí 86 00:03:07,830 --> 00:03:09,930 vale, eso ya lo hicimos 87 00:03:09,930 --> 00:03:12,490 meter un criterio de ordenación 88 00:03:12,490 --> 00:03:13,530 dentro de una clase 89 00:03:13,530 --> 00:03:30,310 ¿Y cómo lo decíamos? Vale, pues si tú quieres saber si vas antes que otro o vas después, significa que lo que tú quieres es ser comparable con otros. ¿Quieres ser comparable con otros? Pues si quieres ser comparable con otros, tienes que implementar la interfaz comparable. 90 00:03:30,310 --> 00:03:32,610 eso ya viene de base 91 00:03:32,610 --> 00:03:34,830 esto ya lo vimos, claro, esto ya está hecho 92 00:03:34,830 --> 00:03:35,650 la interfaz comparable 93 00:03:35,650 --> 00:03:39,090 al menos mal que el criterio de ser 94 00:03:39,090 --> 00:03:41,150 igual a otro lo han aligerado 95 00:03:41,150 --> 00:03:42,990 y con implementar el método ya está 96 00:03:42,990 --> 00:03:45,169 no te obligan a implementar la interfaz 97 00:03:45,169 --> 00:03:47,349 igualable, podría haber sido así 98 00:03:47,349 --> 00:03:48,930 pero ahí no hace falta 99 00:03:48,930 --> 00:03:49,990 entonces 100 00:03:49,990 --> 00:03:52,590 pues comparable 101 00:03:52,590 --> 00:03:54,849 antes de, si tú implementas una interfaz 102 00:03:54,849 --> 00:03:56,550 tienes que implementar todos los métodos que la 103 00:03:56,550 --> 00:03:58,849 implementan, que están 104 00:03:58,849 --> 00:04:00,210 decididos en ella. Pero antes que nada, 105 00:04:00,789 --> 00:04:02,310 comparable es una clase genérica. 106 00:04:03,069 --> 00:04:04,750 Tú puedes, si yo implemento 107 00:04:04,750 --> 00:04:06,349 comparable a palo seco, 108 00:04:07,210 --> 00:04:08,849 me convierto en comparable con 109 00:04:08,849 --> 00:04:10,409 cualquiera del universo. 110 00:04:11,030 --> 00:04:12,830 Yo he pedido, me puedo comparar 111 00:04:12,830 --> 00:04:14,150 con una silla o con un gato. 112 00:04:14,930 --> 00:04:16,889 No tiene sentido. En mi aplicación 113 00:04:16,889 --> 00:04:18,490 no suele tener sentido quién va antes, 114 00:04:18,569 --> 00:04:20,449 este gato o esta silla. No. 115 00:04:20,829 --> 00:04:22,829 Normalmente en mi aplicación yo quiero ordenar 116 00:04:22,829 --> 00:04:24,790 sillas entre sí, gatos entre sí o pedidos 117 00:04:24,790 --> 00:04:26,790 entre sí. Luego, como eso es lo que 118 00:04:26,790 --> 00:04:28,750 yo suelo querer hacer, vamos 119 00:04:28,750 --> 00:04:30,889 a parametrizar la interfaz comparable y decir 120 00:04:30,889 --> 00:04:32,810 oye tú, pedido que estás 121 00:04:32,810 --> 00:04:35,009 aquí, quiero que seas comparable 122 00:04:35,009 --> 00:04:36,829 pero con otros pedidos 123 00:04:36,829 --> 00:04:38,810 no con cualquier bicho del universo 124 00:04:38,810 --> 00:04:40,750 solo con otros pedidos 125 00:04:40,750 --> 00:04:43,009 vale, pues entonces yo ya 126 00:04:43,009 --> 00:04:44,829 parametrizo comparable 127 00:04:44,829 --> 00:04:47,050 con pedido, y ahora ya 128 00:04:47,050 --> 00:04:48,889 vale, muy bien, como implemento comparable 129 00:04:48,889 --> 00:04:51,029 ¿qué método tengo que implementar? 130 00:04:51,529 --> 00:04:52,870 pues el entorno de desarrollo 131 00:04:52,870 --> 00:04:54,069 la bolsita de comida 132 00:04:58,750 --> 00:05:00,370 No sé cómo se implementa una música de su vida. 133 00:05:02,250 --> 00:05:03,029 Vale, entonces, 134 00:05:03,850 --> 00:05:05,230 como tengo un entorno de desarrollo 135 00:05:05,230 --> 00:05:06,910 que son patontos, 136 00:05:06,949 --> 00:05:09,129 entornos de desarrollo, pues no tengo que buscar qué método es, 137 00:05:09,589 --> 00:05:11,050 me lo dice. Oye, 138 00:05:11,189 --> 00:05:13,569 ¿qué es compare tú? Ojo, ¿qué es compare tú? 139 00:05:13,990 --> 00:05:15,250 Venga, méteme el código. 140 00:05:15,410 --> 00:05:17,370 Pin, pin, Adam Implemented Methods. 141 00:05:17,829 --> 00:05:19,310 Y ya el entorno de desarrollo 142 00:05:19,310 --> 00:05:20,850 que es patontos, te dice, 143 00:05:20,850 --> 00:05:22,110 ese es el que tienes que implementar. 144 00:05:22,470 --> 00:05:24,569 ¿Qué pones aquí? Yo qué sé, 145 00:05:24,769 --> 00:05:25,490 lo que tú quieras. 146 00:05:25,490 --> 00:05:27,709 ¿vale? esto estoy repitiendo 147 00:05:27,709 --> 00:05:29,649 esto ya lo contamos para ordenar a raíz 148 00:05:29,649 --> 00:05:31,529 ¿vale? ¿cómo funciona este método? 149 00:05:32,269 --> 00:05:33,930 lo que la humanidad 150 00:05:33,930 --> 00:05:34,790 sobreentiende 151 00:05:34,790 --> 00:05:37,509 es que el objeto que llama al método 152 00:05:37,509 --> 00:05:39,550 irá antes que este 153 00:05:39,550 --> 00:05:41,490 objeto pedido si el valor 154 00:05:41,490 --> 00:05:42,629 entero devuelto es negativo 155 00:05:42,629 --> 00:05:44,430 será el mismo 156 00:05:44,430 --> 00:05:47,389 si el valor es cero y el que llama 157 00:05:47,389 --> 00:05:49,350 al método irá después 158 00:05:49,350 --> 00:05:51,550 que el parámetro si el valor devuelto 159 00:05:51,550 --> 00:05:53,009 es positivo, luego 160 00:05:53,009 --> 00:05:55,149 sabiendo eso, que eso lo tenemos que respetar 161 00:05:55,149 --> 00:05:57,350 sí o sí, para que no se caiga toda la coherencia 162 00:05:57,350 --> 00:05:59,230 del edificio, pues 163 00:05:59,230 --> 00:06:01,209 ahora ya pensamos, vale, ¿cómo quiero 164 00:06:01,209 --> 00:06:03,149 yo ordenar mis pedidos? ¿Cómo 165 00:06:03,149 --> 00:06:05,269 queréis? ¿Por ID? ¿Por 166 00:06:05,269 --> 00:06:07,230 orden alfabetico de descripción? ¿Por de 167 00:06:07,230 --> 00:06:09,350 baratos a caros? Vamos a ordenarlos por precio. 168 00:06:09,550 --> 00:06:11,209 ¿Por ID? No, pues por 169 00:06:11,209 --> 00:06:12,430 precio, que quiero yo por precio. 170 00:06:12,629 --> 00:06:15,050 Pero yo quiero con ID. Ya, pero yo 171 00:06:15,050 --> 00:06:17,050 mando. Entonces, lo vamos a ordenar 172 00:06:17,050 --> 00:06:19,089 por precio. Te lo podría ordenar por 173 00:06:19,089 --> 00:06:21,209 las dos cosas. Y si me 174 00:06:21,209 --> 00:06:23,410 picas, te meto el comparator. 175 00:06:23,670 --> 00:06:23,930 Pero mejor. 176 00:06:25,149 --> 00:06:51,129 Vale, el comparator es el dárselo aparte de este, pero espera, no he dicho nada, ahora lo incorporamos pero no lo decimos, si lo puedo mencionar, lo puedo mencionar sin explicarlo para que tu ansiedad tenga su, vale, vamos a ordenar por precio, vale, pues hombre, pues ahora ya pensamos, como somos muy listos, pensamos, 177 00:06:51,129 --> 00:06:53,930 yo quiero que el que llama al método 178 00:06:53,930 --> 00:06:56,310 cuando el precio sea menor que este 179 00:06:56,310 --> 00:06:57,509 me devuelva un negativo 180 00:06:57,509 --> 00:07:00,129 cuando el precio sea el mismo me devuelva 181 00:07:00,129 --> 00:07:02,149 cero y cuando el precio del que llama al método 182 00:07:02,149 --> 00:07:04,050 sea mayor que este me devuelva 183 00:07:04,050 --> 00:07:06,250 el positivo, hombre pues jolín me han puesto a huevo 184 00:07:06,250 --> 00:07:08,310 pues devuelvo 185 00:07:08,310 --> 00:07:10,050 retún precio 186 00:07:10,050 --> 00:07:12,170 menos o punto 187 00:07:12,170 --> 00:07:13,569 precio y ya está 188 00:07:13,569 --> 00:07:16,069 esto evidentemente, si el precio 189 00:07:16,069 --> 00:07:17,009 del que llama al método 190 00:07:17,009 --> 00:07:18,589 es menor 191 00:07:18,589 --> 00:07:21,250 esta resta va a ser negativa 192 00:07:21,250 --> 00:07:23,250 lógicamente, luego me va a devolver un negativo 193 00:07:23,250 --> 00:07:25,670 si el precio es el mismo 194 00:07:25,670 --> 00:07:26,730 me va a devolver cero 195 00:07:26,730 --> 00:07:29,449 y si el precio del que llama el método es mayor 196 00:07:29,449 --> 00:07:30,870 que el parámetro, me va a dar 197 00:07:30,870 --> 00:07:33,410 esa resta es positiva, luego me va a dar un número positivo 198 00:07:33,410 --> 00:07:34,850 pues hombre 199 00:07:34,850 --> 00:07:36,649 lo que pasa es que como precio es double 200 00:07:36,649 --> 00:07:38,670 pues por eso me dicen, eh, casting 201 00:07:38,670 --> 00:07:40,410 pues venga, no pasa nada, casting 202 00:07:40,410 --> 00:07:45,329 hago un casting de la resta 203 00:07:45,329 --> 00:07:45,750 ahí 204 00:07:45,750 --> 00:07:49,689 tú puedes ordenar como tú quieras 205 00:07:49,689 --> 00:07:51,550 o más que nada como te haya pedido el jefe. 206 00:07:52,509 --> 00:07:53,689 Si te dice que ordenes 207 00:07:53,689 --> 00:07:55,149 por orden alfabético, pues 208 00:07:55,149 --> 00:07:57,350 tendrías que usar el 209 00:07:57,350 --> 00:07:59,670 compare tú de la clase string, que es el 210 00:07:59,670 --> 00:08:01,529 que te devuelve menos uno en función de 211 00:08:01,529 --> 00:08:03,569 qué string. Por ejemplo, que queremos 212 00:08:03,569 --> 00:08:05,990 ordenar por orden alfabético. Vamos a ponernos un comentario. 213 00:08:07,370 --> 00:08:07,769 Eso, 214 00:08:07,949 --> 00:08:08,490 retune. 215 00:08:10,410 --> 00:08:10,850 Descripción. 216 00:08:11,290 --> 00:08:12,970 El string ya tiene el compare tú incluido. 217 00:08:13,089 --> 00:08:15,649 Claro, descripción punto compare 218 00:08:15,649 --> 00:08:16,370 tú 219 00:08:16,370 --> 00:08:18,689 o punto descripción. 220 00:08:18,689 --> 00:08:22,110 vale, pues 221 00:08:22,110 --> 00:08:24,490 si pusiéramos el código de abajo 222 00:08:24,490 --> 00:08:26,490 estaríamos ordenando por orden alfabético 223 00:08:26,490 --> 00:08:28,470 este por orden de precio 224 00:08:28,470 --> 00:08:30,310 vale, pues entonces 225 00:08:30,310 --> 00:08:32,549 esta clase precio ya tiene 226 00:08:32,549 --> 00:08:34,830 el comparable, que esto nos interesa 227 00:08:34,830 --> 00:08:36,570 que lo entendamos bien porque en el triset 228 00:08:36,570 --> 00:08:37,990 lo vamos a usar ahora 229 00:08:37,990 --> 00:08:39,730 vale 230 00:08:39,730 --> 00:08:45,279 vale, entonces ahora 231 00:08:45,279 --> 00:08:47,259 yo puedo llamar a sort 232 00:08:47,259 --> 00:08:48,799 y decirle ordena 233 00:08:48,799 --> 00:08:51,379 y aquí no hace falta que le dé ningún criterio de ordenación 234 00:08:51,379 --> 00:08:53,320 no hace falta, porque ya pedidos uno 235 00:08:53,320 --> 00:08:55,379 ya lo tiene, él ya implementa comparabil y lo tiene 236 00:08:55,379 --> 00:08:57,019 entonces si yo le pido que ordene 237 00:08:57,019 --> 00:08:58,879 y ahora lo vuelvo a recorrer 238 00:08:58,879 --> 00:09:01,659 me lo va a ordenar 239 00:09:01,659 --> 00:09:02,840 por orden de precio 240 00:09:02,840 --> 00:09:05,480 entonces se lo voy a 241 00:09:05,480 --> 00:09:07,700 por orden de precio 242 00:09:07,700 --> 00:09:09,240 en este caso, entonces le voy a poner 243 00:09:09,240 --> 00:09:13,539 le voy a poner 3 244 00:09:13,539 --> 00:09:15,559 1 245 00:09:15,559 --> 00:09:18,059 y 2 246 00:09:18,059 --> 00:09:19,580 para ver 247 00:09:19,580 --> 00:09:21,139 si me los ordena bien por orden de precio 248 00:09:21,139 --> 00:09:22,779 y este remove lo voy a quitar 249 00:09:22,779 --> 00:09:24,779 para que 250 00:09:24,779 --> 00:09:26,639 tenga los tres que he metido 251 00:09:26,639 --> 00:09:29,039 entonces voy a tener estos tres que están desordenados por precio 252 00:09:29,039 --> 00:09:30,899 y ahora 253 00:09:30,899 --> 00:09:33,080 a ver si me los muestra ordenados 254 00:09:33,080 --> 00:09:36,379 eso justo iba a hacer 255 00:09:36,379 --> 00:09:38,259 que me muestre también el precio 256 00:09:38,259 --> 00:09:46,090 mejor si hubiéramos hecho un to string en pedido 257 00:09:46,090 --> 00:09:47,850 más práctico, pero bueno 258 00:09:47,850 --> 00:09:50,269 vale, ejecutamos esto 259 00:09:50,269 --> 00:09:52,169 y efectivamente el sort 260 00:09:52,169 --> 00:09:53,289 me lo ha ordenado por precio 261 00:09:53,289 --> 00:09:55,110 vale 262 00:09:55,110 --> 00:09:58,809 vale, podría ocurrir 263 00:09:58,809 --> 00:10:00,629 que esto es lo que no vamos a concretar 264 00:10:00,629 --> 00:10:02,830 ahora con código, pero para inquietudes 265 00:10:02,830 --> 00:10:04,750 varias, podría ocurrir 266 00:10:04,750 --> 00:10:06,690 que yo quiera ordenar en mi aplicación 267 00:10:06,690 --> 00:10:08,710 esta de aquí, yo quiero ordenar 268 00:10:08,710 --> 00:10:10,049 por precio, y quiero ordenar por precio 269 00:10:10,049 --> 00:10:12,429 pero la clase pedido no la he hecho yo 270 00:10:12,429 --> 00:10:14,570 la tiene Pepito, y o bien 271 00:10:14,570 --> 00:10:16,509 no puedo implementar 272 00:10:16,509 --> 00:10:18,690 comparable, o bien tiene ella un comparable 273 00:10:18,690 --> 00:10:19,529 por orden alfabético 274 00:10:19,529 --> 00:10:22,429 entonces, si tiene un comparable por orden alfabético 275 00:10:22,429 --> 00:10:23,529 y yo quiero ordenar por precio 276 00:10:23,529 --> 00:10:25,230 esto no lo puedo usar 277 00:10:25,230 --> 00:10:28,210 claro, entonces ¿qué hago? 278 00:10:28,730 --> 00:10:30,470 hago un objeto, no, pero es muy sencillo 279 00:10:30,470 --> 00:10:31,990 ya lo incorporamos enseguida 280 00:10:31,990 --> 00:10:34,230 hago un objeto 281 00:10:34,230 --> 00:10:36,250 que es simplemente un objeto 282 00:10:36,250 --> 00:10:38,250 criterio de comparación, no asociado a nada 283 00:10:38,250 --> 00:10:38,730 suelto 284 00:10:38,730 --> 00:10:41,509 que es un objeto comparator, que se llama 285 00:10:41,509 --> 00:10:43,970 se lo meto aquí, y entonces sort 286 00:10:43,970 --> 00:10:46,490 ordenará según el criterio 287 00:10:46,490 --> 00:10:48,429 que yo le meta aquí, no el que tenga 288 00:10:48,429 --> 00:10:49,889 la clase pedido, no ese 289 00:10:49,889 --> 00:10:52,230 entonces yo me hago un objeto 290 00:10:52,230 --> 00:10:54,049 comparator que digo tú, comparator 291 00:10:54,049 --> 00:10:56,350 compara en función del precio 292 00:10:56,350 --> 00:10:57,970 de esta clase pedido que te estoy diciendo 293 00:10:57,970 --> 00:11:00,009 le paso eso ahí justo 294 00:11:00,009 --> 00:11:01,590 y ya está, pero eso 295 00:11:01,590 --> 00:11:04,289 ahora mismo lo olvidamos, vamos a pensar 296 00:11:04,289 --> 00:11:05,870 que short yo le puedo decir 297 00:11:05,870 --> 00:11:08,529 no te pasó nada 298 00:11:08,529 --> 00:11:10,529 porque los objetos pedido 299 00:11:10,529 --> 00:11:12,309 de pedidos uno ya tienen el criterio dentro 300 00:11:12,309 --> 00:11:14,330 pues ordename por ese que tienen dentro 301 00:11:14,330 --> 00:11:15,570 que es el que yo quiero y es el que me vale 302 00:11:15,570 --> 00:11:17,690 y como vemos ordena, ¿vale? 303 00:11:18,669 --> 00:11:19,110 luego 304 00:11:19,110 --> 00:11:22,210 todos los verifuetos y 305 00:11:22,210 --> 00:11:24,429 vicisitudes de ArrayList 306 00:11:24,429 --> 00:11:26,029 están todas 307 00:11:26,029 --> 00:11:27,409 expresadas. 308 00:11:28,750 --> 00:11:28,950 ¿Vale? 309 00:11:30,070 --> 00:11:30,750 Si 310 00:11:30,750 --> 00:11:34,409 miráramos los de LinkedList 311 00:11:34,409 --> 00:11:35,330 por curiosidad, 312 00:11:36,330 --> 00:11:37,909 veríamos que son los mismos 313 00:11:37,909 --> 00:11:40,309 más unos añadidos, pero que nos dan 314 00:11:40,309 --> 00:11:40,669 igual. 315 00:11:43,309 --> 00:11:43,909 Pasamos. 316 00:11:47,009 --> 00:11:53,659 Si miramos los de LinkedList, 317 00:11:54,460 --> 00:11:57,179 Vemos que prácticamente son todos igualitos. 318 00:11:58,139 --> 00:12:01,299 Pero hay algunos extra que no estaban en... 319 00:12:01,299 --> 00:12:03,440 Que son estos del pollo, estos de aquí. 320 00:12:03,840 --> 00:12:07,759 El pick, el pick, el poll, el poll first, el poll, el pop, el push. 321 00:12:08,539 --> 00:12:09,740 Estos que empiezan con la P. 322 00:12:10,799 --> 00:12:12,240 Estos resultados solo están en linked list. 323 00:12:12,960 --> 00:12:13,559 ¿Por qué? 324 00:12:14,220 --> 00:12:18,639 Porque linked list, por sus características de que son nodos dados de la manita, 325 00:12:18,639 --> 00:12:20,399 es muy flexible 326 00:12:20,399 --> 00:12:21,879 para simular 327 00:12:21,879 --> 00:12:24,500 más que flexible, justo 328 00:12:24,500 --> 00:12:26,480 se adapta muy bien computacionalmente 329 00:12:26,480 --> 00:12:27,559 en cuanto a carga computacional 330 00:12:27,559 --> 00:12:30,559 a simular las pilas y las colas 331 00:12:30,559 --> 00:12:32,419 entonces 332 00:12:32,419 --> 00:12:33,940 te dicen, oye, si tú 333 00:12:33,940 --> 00:12:36,460 tienes una aplicación en la cual 334 00:12:36,460 --> 00:12:38,399 tu estructura de todo es una pila, es decir, tú quieres meter 335 00:12:38,399 --> 00:12:40,019 en la pila y luego desapilar y siempre 336 00:12:40,019 --> 00:12:41,480 cuando metas quieres que caiga arriba 337 00:12:41,480 --> 00:12:43,879 y siempre cuando sacas quieres que salga el de arriba 338 00:12:43,879 --> 00:12:45,659 que es una pila por definición 339 00:12:45,659 --> 00:12:48,340 si tú tienes una aplicación en la que ese es el funcionamiento que tú quieres 340 00:12:48,340 --> 00:12:50,919 usa una linked list y usa 341 00:12:50,919 --> 00:12:52,940 los métodos push y pop 342 00:12:52,940 --> 00:12:54,019 y tan ricamente 343 00:12:54,019 --> 00:12:56,919 y ya está, entonces esto 344 00:12:56,919 --> 00:12:58,240 que existan aquí 345 00:12:58,240 --> 00:13:00,820 te induce a que tú 346 00:13:00,820 --> 00:13:02,419 uses la linked list y quieres usar 347 00:13:02,419 --> 00:13:03,899 pilas y colas 348 00:13:03,899 --> 00:13:06,679 y ya está, nada más 349 00:13:06,679 --> 00:13:08,879 entonces aquí uno 350 00:13:08,879 --> 00:13:10,980 puede ver cada método de estos lo que significan 351 00:13:10,980 --> 00:13:12,879 pues push te pone 352 00:13:12,879 --> 00:13:14,820 en la primera posición de la, push es 353 00:13:14,820 --> 00:13:17,000 at first, es lo mismo, te lo dice 354 00:13:17,000 --> 00:13:18,980 aquí, push es añade el 355 00:13:18,980 --> 00:13:20,860 primero, lo que pasa es que se llama 356 00:13:20,860 --> 00:13:23,000 push para que tu código quede más bonito y se vea 357 00:13:23,000 --> 00:13:24,980 claro que es una pila, etcétera, pero es lo mismo 358 00:13:24,980 --> 00:13:26,879 ¿vale? pop 359 00:13:26,879 --> 00:13:28,919 es, elimina el 360 00:13:28,919 --> 00:13:30,820 primero, es lo mismo, elimina el primero 361 00:13:30,820 --> 00:13:32,720 ¿vale? 362 00:13:32,899 --> 00:13:34,860 con la diferencia de que te lo devuelve 363 00:13:34,860 --> 00:13:37,320 ¿vale? te lo devuelve 364 00:13:37,320 --> 00:13:39,019 pero remove first 365 00:13:39,019 --> 00:13:41,120 no te devuelve, ah si remove first 366 00:13:41,120 --> 00:13:42,419 te devuelve true o false 367 00:13:42,419 --> 00:13:44,879 entonces estos métodos 368 00:13:44,879 --> 00:13:46,639 son métodos que están 369 00:13:46,639 --> 00:13:48,840 en realidad redundantes porque se pueden hacer 370 00:13:48,840 --> 00:13:50,940 con métodos de arriba, se pueden hacer con métodos de arriba 371 00:13:50,940 --> 00:13:53,139 pero les cambian el nombre 372 00:13:53,139 --> 00:13:54,940 para inducirte a ti a que si 373 00:13:54,940 --> 00:13:56,840 usas estructuras que funcionan como 374 00:13:56,840 --> 00:13:58,840 pilas y colas, lo hagas con una linked list y usas esos 375 00:13:58,840 --> 00:14:01,039 métodos y el que lee el código 376 00:14:01,039 --> 00:14:02,700 lo ve más claro, lo ve más bonito 377 00:14:02,700 --> 00:14:04,539 ah mira si es una pila patatina 378 00:14:04,539 --> 00:14:07,039 ya está, vale, es la única diferencia 379 00:14:07,039 --> 00:14:08,340 entre linked list y array list 380 00:14:08,340 --> 00:14:12,460 vale, normal 381 00:14:12,460 --> 00:14:14,399 si aparte 382 00:14:14,399 --> 00:14:16,340 de implementación, en cuanto a uso me refiero 383 00:14:16,340 --> 00:14:18,720 en cuanto a uso. Vale, de listas 384 00:14:18,720 --> 00:14:20,379 ¿alguna duda? No, ¿verdad? 385 00:14:23,990 --> 00:14:24,309 Bueno. 386 00:14:26,490 --> 00:14:31,009 Claro, la clave es 387 00:14:31,009 --> 00:14:32,649 que ese método te devuelva 388 00:14:32,649 --> 00:14:35,269 menos 1, 0, 1 y tú ya lo programas 389 00:14:35,269 --> 00:14:37,269 por dentro, como Dios te dé a entender, para que eso ocurra. 390 00:14:37,629 --> 00:14:39,169 Y ya está. Vale. 391 00:14:40,490 --> 00:14:40,929 Conjuntos. 392 00:14:45,379 --> 00:14:46,460 Implementaciones de set. 393 00:14:50,980 --> 00:14:52,299 Pues ya la sabemos. 394 00:14:52,299 --> 00:14:54,480 haset 395 00:14:54,480 --> 00:14:57,259 linked haset que es lo mismito 396 00:14:57,259 --> 00:14:59,220 ahora vemos la única diferencia que tienen 397 00:14:59,220 --> 00:15:01,580 y triset que es 398 00:15:01,580 --> 00:15:02,860 casi lo mismito 399 00:15:02,860 --> 00:15:04,980 ahora lo vemos rápidamente 400 00:15:04,980 --> 00:15:08,879 ¿en cuánto nivel de detalle 401 00:15:08,879 --> 00:15:10,000 estamos hablando exactamente? 402 00:15:10,340 --> 00:15:10,779 pues depende 403 00:15:10,779 --> 00:15:14,679 no pidas no vaya a ser 404 00:15:14,679 --> 00:15:15,679 que se te conceda 405 00:15:15,679 --> 00:15:18,299 y luego te arrepientas 406 00:15:18,299 --> 00:15:20,379 vale, a ver 407 00:15:20,379 --> 00:15:22,320 conjuntos, pues venga 408 00:15:22,320 --> 00:15:23,320 es como la mano de mono 409 00:15:23,320 --> 00:15:24,360 yo nunca diré de este agua 410 00:15:24,360 --> 00:15:29,009 nunca digas de este agua no me veré 411 00:15:29,009 --> 00:15:30,070 ni este cura no soy mi padre 412 00:15:30,070 --> 00:15:33,669 sí, porque un cura acogido al azar 413 00:15:33,669 --> 00:15:35,409 tiene muchas probabilidades de ser el padre de cualquiera 414 00:15:35,409 --> 00:15:37,870 a ver, prueba listas 415 00:15:37,870 --> 00:15:38,970 prueba conjuntos 416 00:15:38,970 --> 00:15:42,450 de verdad, ¿no? 417 00:15:46,740 --> 00:15:48,240 prueba conjuntos 418 00:15:48,240 --> 00:16:00,159 Prueba conjuntos 419 00:16:00,159 --> 00:16:05,600 Pues ya con todo lo que hemos visto 420 00:16:05,600 --> 00:16:07,919 Es que esto ya lo revisamos en un pipas 421 00:16:07,919 --> 00:16:12,240 Vale, ahora yo quiero 422 00:16:12,240 --> 00:16:13,059 Que 423 00:16:13,059 --> 00:16:16,100 Mis pedidos ya no los quiero en listas 424 00:16:16,100 --> 00:16:18,259 Como aquí, los quiero en un conjunto 425 00:16:18,259 --> 00:16:20,919 Pues venga, vamos a centrarnos en un hash set 426 00:16:20,919 --> 00:16:24,659 De nuevo 427 00:16:24,659 --> 00:16:26,879 Lo parametrizo, pues ya sabemos por qué 428 00:16:26,879 --> 00:16:37,309 Importo de java útil 429 00:16:37,309 --> 00:16:38,970 Que es el paquete de colecciones 430 00:16:38,970 --> 00:16:40,830 Vale 431 00:16:40,830 --> 00:16:43,190 Y es que ahora ya los métodos 432 00:16:43,190 --> 00:16:45,269 Son prácticamente idénticos 433 00:16:45,269 --> 00:16:46,269 También depende de colección 434 00:16:46,269 --> 00:16:49,450 Sí, sí, sí, set depende de colección 435 00:16:49,450 --> 00:16:50,889 Y hash, y todas las que 436 00:16:50,889 --> 00:16:53,809 Claro, de colección implementan 437 00:16:53,809 --> 00:16:55,769 Estaba aquí, colección list 438 00:16:55,769 --> 00:16:57,070 y set 439 00:16:57,070 --> 00:16:58,690 vale 440 00:16:58,690 --> 00:17:02,049 entonces ahora ya si vemos los métodos 441 00:17:02,049 --> 00:17:03,009 pues es que son 442 00:17:03,009 --> 00:17:05,950 prácticamente iguales que los de array list 443 00:17:05,950 --> 00:17:07,849 eliminando todo lo que 444 00:17:07,849 --> 00:17:09,769 hace referencia a las posiciones 445 00:17:09,769 --> 00:17:12,009 lo que pasa 446 00:17:12,009 --> 00:17:13,829 es que claro, ahora simplemente tenemos que entender 447 00:17:13,829 --> 00:17:16,109 cómo van a 448 00:17:16,109 --> 00:17:16,730 funcionar 449 00:17:16,730 --> 00:17:19,730 entonces, pedidos 450 00:17:19,730 --> 00:17:22,150 añadir a un set 451 00:17:22,150 --> 00:17:23,529 está claro, añadir 452 00:17:23,529 --> 00:17:24,769 muchos de golpe 453 00:17:24,769 --> 00:17:27,750 vaciar el set entero, hacer un clon que da igual 454 00:17:27,750 --> 00:17:29,309 ver si hay un objeto 455 00:17:29,309 --> 00:17:30,789 igual a otro en el set 456 00:17:30,789 --> 00:17:33,250 exactamente igual 457 00:17:33,250 --> 00:17:35,769 que funciona con el list 458 00:17:35,769 --> 00:17:37,529 diferencia 459 00:17:37,529 --> 00:17:39,690 el hash set 460 00:17:39,690 --> 00:17:41,549 justo 461 00:17:41,549 --> 00:17:43,589 para saber si 462 00:17:43,589 --> 00:17:44,990 uno es igual a otro 463 00:17:44,990 --> 00:17:47,690 tiene que tener los dos 464 00:17:47,690 --> 00:17:49,730 entonces si usáis 465 00:17:49,730 --> 00:17:51,910 un hash set de objetos de una clase 466 00:17:51,910 --> 00:17:55,750 En esa clase tienen que estar los dos, el Haskell de Equals. 467 00:17:56,150 --> 00:17:58,450 Pero en un Haskell no se podían meter los idénticos. 468 00:17:59,529 --> 00:18:01,029 No, pero, claro. 469 00:18:01,029 --> 00:18:02,369 Porque tiene un... 470 00:18:02,369 --> 00:18:03,609 Precisamente por eso. 471 00:18:04,029 --> 00:18:06,769 Claro, entonces aquí, por ejemplo, ¿vale? 472 00:18:06,789 --> 00:18:09,769 Vamos a añadir a pedidos estas tres cositas. 473 00:18:10,470 --> 00:18:11,809 Ahora lo añadimos a nuestro conjunto. 474 00:18:12,210 --> 00:18:13,950 Sí, lo voy diciendo y me doy cuenta mientras lo digo. 475 00:18:14,869 --> 00:18:15,730 No pasa nada. 476 00:18:15,910 --> 00:18:17,849 Vale, entonces, aquí. 477 00:18:21,240 --> 00:18:23,039 Aquí está claro. 478 00:18:23,039 --> 00:18:25,839 ¿cuántos elementos va a haber en la colección 479 00:18:25,839 --> 00:18:27,799 pedidos una vez hechos estos 480 00:18:27,799 --> 00:18:28,539 tres inserts? 481 00:18:31,630 --> 00:18:33,309 si yo hago ahora esto 482 00:18:33,309 --> 00:18:35,549 siso 483 00:18:35,549 --> 00:18:37,529 pedidos.size 484 00:18:37,529 --> 00:18:39,309 ¿qué me va a mostrar? 485 00:18:40,529 --> 00:18:41,089 dos 486 00:18:41,089 --> 00:18:43,089 porque el criterio de igualdad es el id 487 00:18:43,089 --> 00:18:45,490 el id recordad que es este primer 488 00:18:45,490 --> 00:18:47,470 campo, entonces este 489 00:18:47,470 --> 00:18:49,349 y este es igual, aunque el nombre sea 490 00:18:49,349 --> 00:18:51,390 distinto, este 491 00:18:51,390 --> 00:18:53,750 y este es igual, entonces si yo ejecuto 492 00:18:53,750 --> 00:18:56,089 esto. ¿Qué ha pasado? 493 00:19:03,670 --> 00:19:04,069 Vale. 494 00:19:05,529 --> 00:19:07,849 Si yo ejecuto esto, pues me sale dos. 495 00:19:08,490 --> 00:19:10,029 ¿Vale? Me sale dos. ¿Está claro, no? 496 00:19:10,829 --> 00:19:11,890 Sí, sí, sí. Yo sé 497 00:19:11,890 --> 00:19:12,769 que sí, que está claro. 498 00:19:13,930 --> 00:19:15,049 Sí, sí, está claro. 499 00:19:15,869 --> 00:19:16,269 Vale. 500 00:19:18,690 --> 00:19:19,089 Entonces, 501 00:19:19,710 --> 00:19:21,769 el contains, ¿qué hemos dicho? 502 00:19:21,769 --> 00:19:24,130 pues el contains 503 00:19:24,130 --> 00:19:26,230 el remove, es que funcionan igual 504 00:19:26,230 --> 00:19:28,130 la única diferencia es eso 505 00:19:28,130 --> 00:19:30,210 que ahora, si yo quiero 506 00:19:30,210 --> 00:19:32,349 hacer, pues pedidos 507 00:19:32,349 --> 00:19:34,069 punto contains, voy a copiar 508 00:19:34,069 --> 00:19:35,509 el p este de aquí que 509 00:19:35,509 --> 00:19:46,980 pues lógicamente 510 00:19:46,980 --> 00:19:48,400 este me devolvería 511 00:19:48,400 --> 00:19:50,000 true, porque hay uno 512 00:19:50,000 --> 00:19:52,359 igual a este, que lo he añadido 513 00:19:52,359 --> 00:19:53,019 remove 514 00:19:53,019 --> 00:19:55,039 vale, me borra 515 00:19:55,039 --> 00:19:56,720 pero aquí lo que 516 00:19:56,720 --> 00:19:59,099 estábamos viendo es que los métodos que hay son los mismos 517 00:19:59,099 --> 00:20:00,740 que list y funcionan igual 518 00:20:00,740 --> 00:20:03,019 salvo que los de 519 00:20:03,019 --> 00:20:04,119 posición son los que no están 520 00:20:04,119 --> 00:20:07,099 ¿no? añadir 521 00:20:07,099 --> 00:20:09,579 limpiar, contains 522 00:20:09,579 --> 00:20:11,000 si lo contiene 523 00:20:11,000 --> 00:20:12,519 siguiendo el criterio de igualdad 524 00:20:12,519 --> 00:20:15,200 si está vacía 525 00:20:15,200 --> 00:20:17,160 remove 526 00:20:17,160 --> 00:20:18,680 tiene muy pocos métodos como veis 527 00:20:18,680 --> 00:20:21,000 remove no hay un get 528 00:20:21,000 --> 00:20:22,740 por índice, no hay un get index 529 00:20:22,740 --> 00:20:24,700 porque yo no puedo recorrer con índice 530 00:20:24,700 --> 00:20:27,299 no hay un remove por índice 531 00:20:27,299 --> 00:20:28,380 no hay un index of 532 00:20:28,380 --> 00:20:31,279 todos los métodos que trabajan con posiciones 533 00:20:31,279 --> 00:20:33,500 devuélveme la posición en la que hay un objeto igual a este 534 00:20:33,500 --> 00:20:35,220 recupérame el de esta posición 535 00:20:35,220 --> 00:20:36,279 bórrame el de esta posición 536 00:20:36,279 --> 00:20:37,759 todo lo haciendo con posiciones aquí no existe 537 00:20:37,759 --> 00:20:39,559 aquí se lo puedo borrar 538 00:20:39,559 --> 00:20:42,019 por un objeto 539 00:20:42,019 --> 00:20:45,839 bórrame un objeto igual a este 540 00:20:45,839 --> 00:20:48,480 el tamaño 541 00:20:48,480 --> 00:20:51,640 convertir en un array 542 00:20:51,640 --> 00:20:54,579 convertiría en un array en el orden que le pete 543 00:20:54,579 --> 00:20:56,240 porque él los ha ido metiendo 544 00:20:56,240 --> 00:20:57,059 así a mogollón 545 00:20:57,059 --> 00:21:00,380 ¿vale? entonces los métodos 546 00:21:00,380 --> 00:21:01,279 que hay son pocos 547 00:21:01,279 --> 00:21:03,660 y sirven pues para lo básico 548 00:21:03,660 --> 00:21:06,440 ¿vale? entonces para recorrer 549 00:21:06,440 --> 00:21:08,259 el set, para recorrer 550 00:21:08,259 --> 00:21:09,880 es que el for each 551 00:21:09,880 --> 00:21:12,380 el for each deliterador que no lo voy a mencionar todavía 552 00:21:12,380 --> 00:21:14,059 para que no andamos muy 553 00:21:14,059 --> 00:21:14,880 sobrados de tiempo 554 00:21:14,880 --> 00:21:17,700 si yo recorro ahora mis pedidos 555 00:21:17,700 --> 00:21:20,299 ahora sí que vamos a poner un toString en pedido 556 00:21:20,299 --> 00:21:21,299 porque es que ya 557 00:21:21,299 --> 00:21:22,759 Ya nos cansamos 558 00:21:22,759 --> 00:21:25,140 Vamos a poner un toString aquí impedido 559 00:21:25,140 --> 00:21:31,279 Vale 560 00:21:31,279 --> 00:21:36,460 Vale, pues si yo ahora recorro 561 00:21:36,460 --> 00:21:40,680 Aquí, insisto 562 00:21:40,680 --> 00:21:42,759 Aquí no puedo recorrer 563 00:21:42,759 --> 00:21:44,099 Con for de índice, imposible 564 00:21:44,099 --> 00:21:45,559 Porque no hay un get y 565 00:21:45,559 --> 00:21:48,099 Tengo que recorrer con un for each 566 00:21:48,099 --> 00:21:50,619 Luego recorro todos de principio a fin 567 00:21:50,619 --> 00:21:51,980 A menos que haga un break 568 00:21:51,980 --> 00:21:53,519 En algún momento porque me dé la gana 569 00:21:53,519 --> 00:21:56,220 este for va de principio a fin 570 00:21:56,220 --> 00:21:57,220 que sueño tenemos 571 00:21:57,220 --> 00:22:02,400 vale, entonces si yo recorro esto 572 00:22:02,400 --> 00:22:06,240 pedido bolis gomas 573 00:22:06,240 --> 00:22:08,420 voy a no borrar 574 00:22:08,420 --> 00:22:11,839 este no le voy a borrar 575 00:22:11,839 --> 00:22:14,039 voy a meter 576 00:22:14,039 --> 00:22:16,019 este con otro id 577 00:22:16,019 --> 00:22:17,240 para que me meta los tres 578 00:22:17,240 --> 00:22:20,400 el bolis gomas 579 00:22:20,400 --> 00:22:21,039 bolis 580 00:22:21,039 --> 00:22:23,400 el 1, 2 y 3 581 00:22:23,400 --> 00:22:24,900 ahora me va a meter los 3 582 00:22:24,900 --> 00:22:28,779 bolis, gomas, bolis 583 00:22:28,779 --> 00:22:31,200 a ver, es que estoy buscando 584 00:22:31,200 --> 00:22:32,720 yo una, a ver 585 00:22:32,720 --> 00:22:35,319 ahora voy a cambiarles, que me meta aquí 3 586 00:22:35,319 --> 00:22:37,339 voy a meter primero 587 00:22:37,339 --> 00:22:38,920 el 3, luego voy a meter el 1 588 00:22:38,920 --> 00:22:40,500 y luego voy a meter el 2, por ejemplo 589 00:22:40,500 --> 00:22:45,910 vale, ¿qué quería yo ilustrar? 590 00:22:46,910 --> 00:22:48,109 que cuando yo itero 591 00:22:48,109 --> 00:22:50,490 el orden en el que él me los va sacando 592 00:22:50,490 --> 00:22:52,049 de la caja para mostrármelos 593 00:22:52,049 --> 00:22:54,670 no es el orden en el que yo los metí 594 00:22:54,670 --> 00:22:55,890 ¿es el orden del comparito? 595 00:22:56,029 --> 00:23:04,089 no, no es el orden del compare tú 596 00:23:04,089 --> 00:23:05,369 es 597 00:23:05,369 --> 00:23:08,170 el orden 598 00:23:08,170 --> 00:23:09,549 que encuentra en un campo 599 00:23:09,549 --> 00:23:11,769 él los ordena siempre por orden de un campo 600 00:23:11,769 --> 00:23:12,509 a la hora de iterar 601 00:23:12,509 --> 00:23:14,430 pero no sé exactamente 602 00:23:14,430 --> 00:23:18,170 porque estaba buscando a ver si era el alfabético 603 00:23:18,170 --> 00:23:19,349 que 604 00:23:19,349 --> 00:23:21,589 que orden 605 00:23:21,589 --> 00:23:22,829 que orden usa 606 00:23:22,829 --> 00:23:25,509 pero en cualquier caso lo que se caracteriza 607 00:23:25,509 --> 00:23:26,450 de Hachette es 608 00:23:26,450 --> 00:23:29,509 que el orden 609 00:23:29,509 --> 00:23:31,829 de iteración no va a ser nunca el de inserción. 610 00:23:31,950 --> 00:23:33,390 Cual sea. Depende. 611 00:23:33,650 --> 00:23:35,549 Depende de mil cuestiones varias. Nunca 612 00:23:35,549 --> 00:23:37,470 penséis que el Hachette os va 613 00:23:37,470 --> 00:23:39,630 a ayudar y nunca lo uséis 614 00:23:39,630 --> 00:23:41,410 si el orden es algo interesante para vosotros. 615 00:23:41,509 --> 00:23:43,549 Orden en la iteración. Porque vete 616 00:23:43,549 --> 00:23:45,509 a saber. No hay un criterio establecido. 617 00:23:45,650 --> 00:23:47,349 Depende en el orden en el que tú pongas las propiedades. 618 00:23:47,430 --> 00:23:49,250 Pero siempre que ejecutes el programa 619 00:23:49,250 --> 00:23:50,329 si ha salido un orden es el mismo. 620 00:23:50,990 --> 00:23:53,369 Que yo sepa, sí. Yo siempre lo he visto 621 00:23:53,369 --> 00:23:55,069 igual. 622 00:23:55,509 --> 00:23:57,150 Pero no va a ser el orden de inserción 623 00:23:57,150 --> 00:23:59,009 y no es fácil controlar 624 00:23:59,009 --> 00:24:00,509 con qué orden te va a iterar. 625 00:24:00,950 --> 00:24:02,849 Entonces, cuando uno usa HashSet, es que el orden 626 00:24:02,849 --> 00:24:05,390 realmente le da igual. Y aquí, lógicamente, 627 00:24:05,769 --> 00:24:07,950 Claro. 628 00:24:09,069 --> 00:24:11,410 Claro. Si no habría escogido otra... 629 00:24:11,410 --> 00:24:13,009 Vale, y aquí el sort, por ejemplo, no existe. 630 00:24:13,750 --> 00:24:15,069 Yo aquí en... 631 00:24:15,589 --> 00:24:16,970 Claro. Si yo trato 632 00:24:16,970 --> 00:24:17,569 de hacer 633 00:24:17,569 --> 00:24:21,049 pet.sort, ordenar, 634 00:24:21,289 --> 00:24:22,109 pedidos, perdón, 635 00:24:24,660 --> 00:24:26,700 me dice, perdona, que el método sort 636 00:24:26,700 --> 00:24:28,900 no existe 637 00:24:28,900 --> 00:24:30,140 para haset 638 00:24:30,140 --> 00:24:33,259 claro, no hay otra cosa que tú quieras 639 00:24:33,259 --> 00:24:34,160 vale, no existe 640 00:24:34,160 --> 00:24:37,279 entonces, nada relacionado con posiciones 641 00:24:37,279 --> 00:24:38,480 ni orden existe aquí 642 00:24:38,480 --> 00:24:41,220 y lo más crítico es eso 643 00:24:41,220 --> 00:24:42,779 que el orden en el que tú iteras 644 00:24:42,779 --> 00:24:45,400 no va a ser el orden en el que has insertado 645 00:24:45,400 --> 00:24:47,140 si a ti te interesa que lo sea 646 00:24:47,140 --> 00:24:49,240 te interesa cambiar órdenes, lo que sea 647 00:24:49,240 --> 00:24:50,460 nunca usarías un haset 648 00:24:50,460 --> 00:24:51,079 vale 649 00:24:51,079 --> 00:24:55,059 aquí viene la 650 00:24:55,059 --> 00:24:57,019 única diferencia entre el hashed 651 00:24:57,019 --> 00:24:58,240 y el linked hashed 652 00:24:58,240 --> 00:25:00,619 que el linked hashed 653 00:25:00,619 --> 00:25:02,880 en la iteración 654 00:25:02,880 --> 00:25:05,359 cuando tú iteras, sí te va a conservar 655 00:25:05,359 --> 00:25:06,660 el orden en que insertaste 656 00:25:06,660 --> 00:25:09,180 a cambio es más 657 00:25:09,180 --> 00:25:10,519 complejo computacionalmente 658 00:25:10,519 --> 00:25:11,799 pero es la única diferencia 659 00:25:11,799 --> 00:25:14,920 de hecho si esto lo cambiamos 660 00:25:14,920 --> 00:25:19,279 se supone que sí 661 00:25:19,279 --> 00:25:21,000 porque el linked hashed está doblemente 662 00:25:21,000 --> 00:25:22,299 enlazada a la lista que 663 00:25:22,299 --> 00:25:24,779 si cambiamos 664 00:25:24,779 --> 00:25:25,779 a linked hash set 665 00:25:25,779 --> 00:25:33,000 aquí veríamos 666 00:25:33,000 --> 00:25:34,920 que ahora ya el recorrido 667 00:25:34,920 --> 00:25:37,640 veis, si itera siguiendo 668 00:25:37,640 --> 00:25:38,779 el orden en que yo inserté 669 00:25:38,779 --> 00:25:40,859 itera siguiendo el orden 670 00:25:40,859 --> 00:25:42,960 que a uno le interesa 671 00:25:42,960 --> 00:25:45,779 usar un set, un hash set porque es muy bueno 672 00:25:45,779 --> 00:25:47,779 y está muy bien, pero la particularidad 673 00:25:48,420 --> 00:25:49,819 de que según tú vas 674 00:25:49,819 --> 00:25:52,119 insertando, se recupere 675 00:25:52,119 --> 00:25:53,720 ese orden se mantenga cuando 676 00:25:53,720 --> 00:25:54,480 tú iteras 677 00:25:54,480 --> 00:25:56,880 si te interesa eso por algo 678 00:25:56,880 --> 00:25:57,980 usas un LinkedHashet 679 00:25:57,980 --> 00:26:00,319 si no te interesa eso te da igual 680 00:26:00,319 --> 00:26:01,599 pues un Hashet que es 681 00:26:01,599 --> 00:26:03,859 más eficiente 682 00:26:03,859 --> 00:26:04,859 vale 683 00:26:04,859 --> 00:26:10,640 bueno porque 684 00:26:10,640 --> 00:26:13,000 los Arrays 685 00:26:13,000 --> 00:26:16,839 vale 686 00:26:16,839 --> 00:26:18,680 porque no te interesa llevar un registro 687 00:26:18,680 --> 00:26:20,460 de la posición porque no vas a borrar por posición 688 00:26:20,460 --> 00:26:22,480 no vas a borrar pero a lo mejor es una aplicación 689 00:26:22,480 --> 00:26:24,079 en la que tú tienes una funcionalidad 690 00:26:24,079 --> 00:26:26,420 es que sacar listados, listados de lo que hay. 691 00:26:26,759 --> 00:26:28,279 Y te interesa que el listado salga 692 00:26:28,279 --> 00:26:29,539 en el mismo orden en el que llegaron. 693 00:26:30,220 --> 00:26:32,579 Pues, por ejemplo, entonces, sacar el listado es iterar. 694 00:26:33,240 --> 00:26:34,420 Pues, bueno, en eso en particular, 695 00:26:34,799 --> 00:26:35,940 tú vas a iterar y te van a salir 696 00:26:35,940 --> 00:26:36,900 en el mismo orden en el que llegaron. 697 00:26:36,980 --> 00:26:37,460 Pues, ahí sí. 698 00:26:38,059 --> 00:26:39,660 Pero todas las funcionalidades de 699 00:26:39,660 --> 00:26:41,220 recupérame el de posición 7, 700 00:26:41,359 --> 00:26:43,079 bórrame el de posición 8, no las tendrías, 701 00:26:43,440 --> 00:26:45,539 con lo cual te ahorras, es más eficiente. 702 00:26:46,420 --> 00:26:46,599 ¿Vale? 703 00:26:48,119 --> 00:26:49,279 Entonces, bueno, el link de headset 704 00:26:49,279 --> 00:26:51,680 tampoco es que tenga mayor interés, en realidad. 705 00:26:51,680 --> 00:26:53,259 solo aporta eso 706 00:26:53,259 --> 00:26:54,220 entonces 707 00:26:54,220 --> 00:26:55,279 vale 708 00:26:55,279 --> 00:26:59,799 entonces lo ponemos aquí 709 00:26:59,799 --> 00:27:01,279 simplemente en un comentario 710 00:27:01,279 --> 00:27:02,740 que 711 00:27:02,740 --> 00:27:03,980 el 712 00:27:03,980 --> 00:27:06,619 orden 713 00:27:06,619 --> 00:27:09,059 de iteración 714 00:27:09,059 --> 00:27:12,240 el orden 715 00:27:12,240 --> 00:27:15,000 de iteración 716 00:27:15,000 --> 00:27:22,079 no es 717 00:27:22,079 --> 00:27:25,000 el de inserción 718 00:27:25,000 --> 00:27:27,559 en un 719 00:27:27,559 --> 00:27:29,740 linked 720 00:27:29,740 --> 00:27:31,579 hash set, sí, esa es la única diferencia 721 00:27:31,579 --> 00:27:35,819 vale, pues entonces el hash set es muy cómodo 722 00:27:35,819 --> 00:27:37,119 pero es para meter a 723 00:27:37,119 --> 00:27:39,740 ahí hago el picorrazo, un rollo 724 00:27:39,740 --> 00:27:41,640 claro, si queremos hacer cosas 725 00:27:41,640 --> 00:27:43,740 con cualquier elemento, siempre hay que 726 00:27:43,740 --> 00:27:46,279 iterar, quiero recuperar 727 00:27:46,279 --> 00:27:48,019 el elemento de id 5 728 00:27:48,019 --> 00:27:49,640 tienes que iterar 729 00:27:49,640 --> 00:27:51,740 pedido es el pedido de id 5 730 00:27:51,740 --> 00:27:53,700 hago con él lo que sea, quiero recuperar 731 00:27:53,700 --> 00:27:55,859 el pedido de descripción 732 00:27:55,859 --> 00:27:57,480 bolis. Tienes que iterar. 733 00:27:58,240 --> 00:27:59,740 Vas iterando. Este es el 734 00:27:59,740 --> 00:28:01,420 de descripción bolis, patatín. Entonces, 735 00:28:01,619 --> 00:28:03,440 en un haset tienes que iterar 736 00:28:03,440 --> 00:28:05,519 para cualquier cosa que quieras que haga un elemento. 737 00:28:05,680 --> 00:28:07,579 Porque como no tiene en orden, no puedes decir 738 00:28:07,579 --> 00:28:09,579 ah, sácame el tercero, pues tienes que 739 00:28:09,579 --> 00:28:11,720 iterar hasta que encuentras el que buscas. 740 00:28:12,259 --> 00:28:12,460 ¿Vale? 741 00:28:14,079 --> 00:28:14,559 Vale. 742 00:28:19,180 --> 00:28:20,019 Vamos a 743 00:28:20,019 --> 00:28:22,440 dejar ahora mismo 744 00:28:22,440 --> 00:28:24,339 para terminar 745 00:28:24,339 --> 00:28:26,380 con el triset, porque eso ya lo vamos 746 00:28:26,380 --> 00:28:27,740 a ver en un ejercicio el jueves 747 00:28:27,740 --> 00:28:30,259 ¿qué pasa cuando 748 00:28:30,259 --> 00:28:32,380 quieres borrar de un haset 749 00:28:32,380 --> 00:28:34,380 por algo que no 750 00:28:34,380 --> 00:28:35,339 sea la clave primaria? 751 00:28:36,279 --> 00:28:37,619 ¿vale? a ver 752 00:28:37,619 --> 00:28:40,359 sí, o sea cuando 753 00:28:40,359 --> 00:28:41,700 tú, yo quiero borrar 754 00:28:41,700 --> 00:28:44,279 el pedido de índice 1, pues ya sabemos 755 00:28:44,279 --> 00:28:45,700 que en el haset haríamos esto 756 00:28:45,700 --> 00:28:47,460 lo mismo que en la lista 757 00:28:47,460 --> 00:28:50,019 haríamos esto, pedidos punto 758 00:28:50,019 --> 00:28:52,279 remove p 759 00:28:52,279 --> 00:28:54,380 esto es lo mismo que hemos hecho en la 760 00:28:54,380 --> 00:28:56,680 lista. Pues te borraría 761 00:28:56,680 --> 00:28:58,180 del mi set de pedidos, 762 00:28:58,299 --> 00:29:00,279 te borraría el único que encuentra, 763 00:29:00,339 --> 00:29:02,559 en este caso el único, porque no puede haber más de uno, 764 00:29:03,519 --> 00:29:04,480 igual a este. 765 00:29:04,940 --> 00:29:05,339 Igual. 766 00:29:06,680 --> 00:29:08,259 Igual significa el que tenga ID 1. 767 00:29:08,779 --> 00:29:10,380 El único que te encuentre, si es que hay uno, 768 00:29:10,460 --> 00:29:12,619 podría no haber ninguno. Con ID igual a 1 te lo borra. 769 00:29:13,859 --> 00:29:14,619 El problema 770 00:29:14,619 --> 00:29:16,640 es si tú quieres eliminar de la lista 771 00:29:16,640 --> 00:29:20,339 los elementos 772 00:29:20,339 --> 00:29:22,400 cuya descripción sea 773 00:29:22,400 --> 00:29:23,640 bolis, por ejemplo. 774 00:29:23,640 --> 00:29:25,160 no lo puedes hacer con remove 775 00:29:25,160 --> 00:29:27,599 porque remove te borra solo los iguales 776 00:29:27,599 --> 00:29:29,140 en clave primaria 777 00:29:29,140 --> 00:29:31,319 tendríamos que recorrer 778 00:29:31,319 --> 00:29:32,940 cuando encontramos uno igual 779 00:29:32,940 --> 00:29:35,359 cuya descripción sea bolis 780 00:29:35,359 --> 00:29:37,240 entonces le paso al remove 781 00:29:37,240 --> 00:29:38,460 y eso da problemas 782 00:29:38,460 --> 00:29:40,099 entonces eso en particular 783 00:29:40,099 --> 00:29:44,759 a ver 784 00:29:44,759 --> 00:29:46,660 vamos a suponer que quisiéramos hacer esto 785 00:29:46,660 --> 00:29:48,859 por ejemplo vamos a hacer ahora 786 00:29:48,859 --> 00:29:50,440 vamos a borrar 787 00:29:50,440 --> 00:29:56,720 todos los pedidos 788 00:29:56,720 --> 00:29:57,240 con 789 00:29:57,240 --> 00:30:00,339 descripción 790 00:30:00,339 --> 00:30:01,980 bolis 791 00:30:01,980 --> 00:30:04,619 vale, entonces esto está claro 792 00:30:04,619 --> 00:30:06,099 que no lo podemos hacer con el remove 793 00:30:06,099 --> 00:30:08,799 a secas, porque el remove a secas 794 00:30:08,799 --> 00:30:10,619 yo le tengo que pasar un objeto y me borrará 795 00:30:10,619 --> 00:30:12,559 el igual a ese y el igual implica 796 00:30:12,559 --> 00:30:14,400 el igual en id, luego 797 00:30:14,400 --> 00:30:16,380 borrar todos los pedidos con descripción bolis 798 00:30:16,380 --> 00:30:18,339 me toca iterar 799 00:30:18,339 --> 00:30:20,660 y cada uno que encuentre mandarle a borrar 800 00:30:20,660 --> 00:30:23,440 entonces uno con lo que sabemos hasta ahora haría esto 801 00:30:23,440 --> 00:30:25,099 vale 802 00:30:25,099 --> 00:30:26,920 para cada pedido 803 00:30:26,920 --> 00:30:28,960 p en pedidos 804 00:30:28,960 --> 00:30:31,400 empezamos 805 00:30:31,400 --> 00:30:32,420 sin llaves 806 00:30:32,420 --> 00:30:34,220 cada pedido 807 00:30:34,220 --> 00:30:37,140 este pedido 808 00:30:37,140 --> 00:30:37,500 p 809 00:30:37,500 --> 00:30:40,079 resulta que 810 00:30:40,079 --> 00:30:42,140 su descripción 811 00:30:42,140 --> 00:30:44,380 es igual 812 00:30:44,380 --> 00:30:46,359 que 813 00:30:46,359 --> 00:30:47,480 bolis 814 00:30:47,480 --> 00:30:50,480 que es la descripción que me ha dicho que tengo que borrar 815 00:30:50,480 --> 00:30:53,660 es igual, vale 816 00:30:53,660 --> 00:30:55,619 entonces 817 00:30:55,619 --> 00:30:57,319 me toca borrarlo 818 00:30:57,319 --> 00:30:58,480 pues entonces yo 819 00:30:58,480 --> 00:31:01,220 uno se plantearía, de pedidos 820 00:31:01,220 --> 00:31:02,900 punto remove 821 00:31:02,900 --> 00:31:04,640 pet 822 00:31:04,640 --> 00:31:07,119 porque me va a borrar uno 823 00:31:07,119 --> 00:31:09,480 igual a este, que es justo 824 00:31:09,480 --> 00:31:11,819 el que quiero borrar, el que tiene esta descripción 825 00:31:11,819 --> 00:31:13,299 vale, entonces uno 826 00:31:13,299 --> 00:31:15,319 se plantearía hacer esto 827 00:31:15,319 --> 00:31:16,240 ¿verdad? 828 00:31:17,420 --> 00:31:18,900 vamos a hacerlo 829 00:31:18,900 --> 00:31:20,380 vamos a hacerlo 830 00:31:20,380 --> 00:31:29,759 No, a ver, es que vamos a forzar 831 00:31:29,759 --> 00:31:33,779 No, no, no, es que lo que yo quiero provocar 832 00:31:33,779 --> 00:31:35,259 es otra cosa, es que se provoca a veces 833 00:31:35,259 --> 00:31:37,400 y a veces no en función de dónde está la posición a borrar 834 00:31:37,400 --> 00:31:39,180 Eso es lo que no quería contar hasta el jueves 835 00:31:39,180 --> 00:31:42,019 Pero ya que preguntáis tanto, vamos a borrar el GOMAS 836 00:31:42,019 --> 00:31:43,240 El GOMAS 837 00:31:43,240 --> 00:31:47,180 El GOMAS 838 00:31:47,180 --> 00:31:51,500 Ay, que jodido 839 00:31:51,500 --> 00:31:52,940 Ahora no me sale la excepción 840 00:31:52,940 --> 00:31:54,539 Me tiene que salir 841 00:31:54,539 --> 00:31:56,359 No es tan fácil provocarla 842 00:31:56,359 --> 00:31:58,500 Vamos a borrar este 843 00:31:58,500 --> 00:32:02,440 Espérate, voy a quitar este 844 00:32:02,440 --> 00:32:03,819 Ah, vale, vale, vale 845 00:32:03,819 --> 00:32:05,380 Es que antes no me iba a salir porque ya lo tenía borrado 846 00:32:05,380 --> 00:32:07,960 Vale, entonces, espérate 847 00:32:07,960 --> 00:32:09,539 Yo creo que con bolis ahora me va a salir 848 00:32:09,539 --> 00:32:11,859 Porque es que antes lo tenía eliminado ya, me parece 849 00:32:11,859 --> 00:32:14,140 Igual yo creo que ahora con bolis 850 00:32:14,140 --> 00:32:15,759 Sí que me va a salir, creo, creo 851 00:32:15,759 --> 00:32:16,339 Solo lo creo 852 00:32:16,339 --> 00:32:19,380 Que jodido 853 00:32:19,380 --> 00:32:20,720 A ver 854 00:32:20,720 --> 00:32:29,420 Por fin 855 00:32:29,420 --> 00:32:30,119 Vale 856 00:32:30,119 --> 00:32:32,640 Aquí sale una excepción 857 00:32:32,640 --> 00:32:35,359 Que sale a veces y a veces no 858 00:32:35,359 --> 00:32:36,640 Como veis depende 859 00:32:36,640 --> 00:32:38,819 Donde haya caído del conjunto 860 00:32:38,819 --> 00:32:41,119 Donde haya caído el que toca borrar 861 00:32:41,119 --> 00:32:42,779 Si en la iteración es el primero 862 00:32:42,779 --> 00:32:44,019 O es el último o es el segundo 863 00:32:44,019 --> 00:32:46,619 Si es el último de la iteración 864 00:32:46,619 --> 00:32:47,960 No del orden de inserción 865 00:32:47,960 --> 00:32:50,960 Pero si es uno de los que no es el último 866 00:32:50,980 --> 00:32:52,920 último del orden de iteración, te sale 867 00:32:52,920 --> 00:32:54,380 esto. ¿Quién lo dice? 868 00:32:54,599 --> 00:32:54,880 ¿Eh? 869 00:32:56,740 --> 00:32:58,619 Claro. ¿Cómo que 870 00:32:58,619 --> 00:33:00,720 error de modificación concurrente? 871 00:33:00,799 --> 00:33:02,859 ¿Qué me estás contando? ¿Concurrencia 872 00:33:02,859 --> 00:33:04,740 de hay varios hilos haciendo 873 00:33:04,740 --> 00:33:06,500 el mismo recurso? ¿Pero qué me estás contando? 874 00:33:06,579 --> 00:33:08,480 Si aquí no tengo yo hilos, solo tengo un programa. 875 00:33:09,019 --> 00:33:10,059 ¿Qué me estás contando? 876 00:33:10,539 --> 00:33:11,819 Claro, es que esto de fondo, 877 00:33:12,359 --> 00:33:13,819 de fondo este main, 878 00:33:13,900 --> 00:33:14,700 nosotros no lo veamos, 879 00:33:15,759 --> 00:33:17,220 resulta que este pedidos 880 00:33:17,220 --> 00:33:19,720 se está recorriendo dos veces. 881 00:33:19,720 --> 00:33:21,480 una en este for 882 00:33:21,480 --> 00:33:23,660 y el remove 883 00:33:23,660 --> 00:33:25,940 de nuevo te hace otro for dentro 884 00:33:25,940 --> 00:33:27,940 hasta que encuentra uno igual a este 885 00:33:27,940 --> 00:33:28,559 y te lo borra 886 00:33:28,559 --> 00:33:31,619 luego, el for each es muy puñetero 887 00:33:31,619 --> 00:33:32,680 este for de aquí 888 00:33:32,680 --> 00:33:35,960 y te bloquea la colección, te bloquea el recurso 889 00:33:35,960 --> 00:33:37,880 al bloqueártela 890 00:33:37,880 --> 00:33:39,579 cuando el remove trata de 891 00:33:39,579 --> 00:33:41,279 volver a iterar sobre ella 892 00:33:41,279 --> 00:33:43,640 hasta que encuentre uno igual a pet en pedidos 893 00:33:43,640 --> 00:33:45,920 que me la han bloqueado 894 00:33:45,920 --> 00:33:47,779 error de concurrencia 895 00:33:47,779 --> 00:33:49,359 por eso cuando es el último 896 00:33:49,359 --> 00:33:51,599 la iteración no te sale, porque el foro ya lo ha soltado. 897 00:33:52,059 --> 00:33:52,660 Ya lo ha soltado. 898 00:33:53,680 --> 00:33:55,480 Conclusión, cuando queremos 899 00:33:55,480 --> 00:33:57,240 eliminar elementos 900 00:33:57,240 --> 00:33:58,559 de un set, 901 00:33:59,339 --> 00:34:00,259 de un set, 902 00:34:01,019 --> 00:34:03,299 no por clave primaria, porque si fuera por clave 903 00:34:03,299 --> 00:34:05,460 primaria, por criterio de igualdad, lo haríamos así. 904 00:34:06,019 --> 00:34:07,579 Ningún problema, lo haríamos así. 905 00:34:08,559 --> 00:34:08,960 Remove 906 00:34:08,960 --> 00:34:11,099 y te paso el que es igual al que quiero borrar. 907 00:34:11,599 --> 00:34:13,400 Cuando quiero borrar por otros criterios 908 00:34:13,400 --> 00:34:15,119 y eso me obliga a iterar, 909 00:34:16,059 --> 00:34:17,420 nunca jamás lo haríamos así. 910 00:34:17,420 --> 00:34:19,420 lo haríamos con iterador 911 00:34:19,420 --> 00:34:20,639 que mencionamos el jueves 912 00:34:20,639 --> 00:34:24,159 pero con un objeto iterador 913 00:34:24,159 --> 00:34:26,079 que usamos solo para eso 914 00:34:26,079 --> 00:34:26,860 y para nada más 915 00:34:26,860 --> 00:34:27,679 para esta situación 916 00:34:27,679 --> 00:34:33,639 si, eliminar de un set 917 00:34:33,639 --> 00:34:36,000 un conjunto de elementos 918 00:34:36,000 --> 00:34:36,980 que ocupen la condición 919 00:34:36,980 --> 00:34:39,019 pues si, y eso lo tienes que hacer con iterador 920 00:34:39,019 --> 00:34:39,940 ¿vale? 921 00:34:40,820 --> 00:34:41,219 dime 922 00:34:41,219 --> 00:34:44,980 no, no, no, porque vamos a acabar el triset 923 00:34:44,980 --> 00:34:46,360 si no estáis cansados 924 00:34:46,360 --> 00:34:50,840 Respira fondo 925 00:34:50,840 --> 00:34:53,920 A ver, ¿hace falta un descanso? 926 00:34:58,389 --> 00:34:59,409 Nadie está cansado 927 00:34:59,409 --> 00:35:04,429 A ver, ¿acabo cuando acabo? 928 00:35:04,530 --> 00:35:06,070 Es que no te puedo decir cuando acabo 929 00:35:06,070 --> 00:35:08,210 A ver, yo sé lo que quiero contar 930 00:35:08,210 --> 00:35:10,230 Y no me voy a ir de aquí hasta que no lo contemos 931 00:35:10,230 --> 00:35:11,550 Entonces 932 00:35:11,550 --> 00:35:18,309 Espero que no, que la soledad es muy dura 933 00:35:18,309 --> 00:35:21,710 Claro 934 00:35:21,710 --> 00:35:22,929 Bueno, venga 935 00:35:22,929 --> 00:35:24,429 Respira hondo 936 00:35:24,429 --> 00:35:25,929 Y seguimos, ¿os parece? 937 00:35:26,710 --> 00:35:28,849 Venga, tira, dale, venga 938 00:35:28,849 --> 00:35:31,250 Como las cabras 939 00:35:31,250 --> 00:35:32,570 Vamos 940 00:35:32,570 --> 00:35:33,889 ¿Has quedado? 941 00:35:35,670 --> 00:35:37,550 Ay, qué bonito, di que sí 942 00:35:37,550 --> 00:35:38,610 Venga 943 00:35:38,610 --> 00:35:41,630 Ay, qué bien los colegas 944 00:35:41,630 --> 00:35:42,829 Vale, pues a ver 945 00:35:42,829 --> 00:35:45,190 De Hachette 946 00:35:45,190 --> 00:35:46,889 De Link de Hachette 947 00:35:46,889 --> 00:35:48,070 Todo lo que quitamos lo sabemos 948 00:35:48,070 --> 00:35:51,150 A falta de ver cómo solucionamos este problemita. 949 00:36:00,530 --> 00:36:07,530 Esto ya lo arreglaremos con el objeto iterator. 950 00:36:07,929 --> 00:36:09,610 Una cosa muy facilita y muy sencilla. 951 00:36:10,690 --> 00:36:11,530 Vale. 952 00:36:12,690 --> 00:36:15,510 Por último, por ultimito. 953 00:36:17,210 --> 00:36:18,030 Hay una... 954 00:36:18,030 --> 00:36:19,250 Bueno, no por penúltimo. 955 00:36:19,250 --> 00:36:21,070 nos falta el repasito rápido 956 00:36:21,070 --> 00:36:21,590 de los map 957 00:36:21,590 --> 00:36:25,409 por último 958 00:36:25,409 --> 00:36:27,469 hay una implementación 959 00:36:27,469 --> 00:36:29,050 de set que no hemos mencionado todavía 960 00:36:29,050 --> 00:36:29,889 que es el triset 961 00:36:29,889 --> 00:36:32,570 pero es un conjunto sin más 962 00:36:32,570 --> 00:36:34,449 vale 963 00:36:34,449 --> 00:36:36,909 ¿qué diferencia usar un set 964 00:36:36,909 --> 00:36:38,690 un hash set y un triset? 965 00:36:38,829 --> 00:36:39,989 ahora lo vemos 966 00:36:39,989 --> 00:36:42,550 eso 967 00:36:42,550 --> 00:36:45,269 un triset y un hash set 968 00:36:45,269 --> 00:36:47,269 por dentro no tienen nada 969 00:36:47,269 --> 00:36:48,809 que ver, son completamente distintos 970 00:36:48,809 --> 00:36:50,489 Eso está claro, ¿vale? 971 00:36:51,489 --> 00:36:56,550 Entonces, que por dentro sean distintos implica precisamente 972 00:36:56,550 --> 00:36:58,989 por qué en algunas situaciones elegirías uno y otro. 973 00:36:59,750 --> 00:37:03,670 Un triset, un triset es un arbolito. 974 00:37:09,929 --> 00:37:13,170 Claro que sí, hombre, toda mi vida, todas horas. 975 00:37:13,750 --> 00:37:17,949 La comida, la cena, la merienda, todo el rato. 976 00:37:18,809 --> 00:37:20,369 No 977 00:37:20,369 --> 00:37:23,949 Vale, esto es un triset 978 00:37:23,949 --> 00:37:48,119 Mira 979 00:37:48,119 --> 00:37:50,179 Eso digo yo 980 00:37:50,179 --> 00:37:52,039 Te estarías aquí como un tonto dos horas 981 00:37:52,039 --> 00:37:53,079 Para hacer una patata 982 00:37:53,079 --> 00:37:55,920 venga, a ver, esto es 983 00:37:55,920 --> 00:37:57,079 un árbol binario 984 00:37:57,079 --> 00:38:00,199 es una estructura básica en programación 985 00:38:00,199 --> 00:38:02,099 como las listas enlazadas que ya hemos 986 00:38:02,099 --> 00:38:03,639 visto, vale 987 00:38:03,639 --> 00:38:05,940 pues el triset guarda 988 00:38:05,940 --> 00:38:07,840 los elementos en un árbol binario 989 00:38:07,840 --> 00:38:09,659 a ver 990 00:38:09,659 --> 00:38:11,219 silencio 991 00:38:11,219 --> 00:38:13,340 Rodrigo 992 00:38:18,139 --> 00:38:19,099 venga, respiramos 993 00:38:19,099 --> 00:38:21,559 tú lo bajas en la tapa todavía 994 00:38:21,559 --> 00:38:23,099 que te veo 995 00:38:23,099 --> 00:38:27,619 Pedro 996 00:38:27,619 --> 00:38:32,860 prueba el autocontrol 997 00:38:32,860 --> 00:38:33,960 venga 998 00:38:33,960 --> 00:38:37,039 ¿dónde guarda el tríceps 999 00:38:37,039 --> 00:38:38,900 los elementos? aquí en estos nodos 1000 00:38:38,900 --> 00:38:40,380 aquí irían 1001 00:38:40,380 --> 00:38:42,280 que yo meto pedidos 1002 00:38:42,280 --> 00:38:44,960 este sería un pedido, este sería 1003 00:38:44,960 --> 00:38:47,219 otro, este sería otro, los guarda en un árbol 1004 00:38:47,219 --> 00:38:49,380 vale, y ahora diríais 1005 00:38:49,380 --> 00:38:51,019 ¿cuál es el criterio 1006 00:38:51,019 --> 00:38:52,699 en qué nodo guarda cada pedido? 1007 00:38:53,480 --> 00:38:54,800 Ah, pues el tríceps 1008 00:38:54,800 --> 00:38:56,980 sigue el criterio de orden. 1009 00:38:58,280 --> 00:38:59,420 Esto es, el tríceps 1010 00:38:59,420 --> 00:39:01,039 es un árbol binario 1011 00:39:01,039 --> 00:39:01,739 ordenado. 1012 00:39:03,039 --> 00:39:04,960 ¿Vale? Importante si no quieres sacar 1013 00:39:04,960 --> 00:39:06,760 un cero. ¿Vale? 1014 00:39:07,119 --> 00:39:08,739 Un árbol binario ordenado. 1015 00:39:09,340 --> 00:39:11,159 Esto significa que 1016 00:39:11,159 --> 00:39:13,360 yo aquí 1017 00:39:13,360 --> 00:39:15,099 tengo un elemento. Pues el que 1018 00:39:15,099 --> 00:39:16,880 esté hacia acá será menor que este y el que 1019 00:39:16,880 --> 00:39:18,960 esté hacia acá será mayor. Ahora, y quiero 1020 00:39:18,960 --> 00:39:20,920 meter uno nuevo. El que quiero meter es 1021 00:39:20,920 --> 00:39:22,760 mayor que este? Sí, va a la derecha. Vale. 1022 00:39:22,860 --> 00:39:24,840 Ahora lo comparo con este. ¿Es menor 1023 00:39:24,840 --> 00:39:26,219 que este? Pues va a la izquierda. 1024 00:39:27,260 --> 00:39:28,780 ¿Vale? Imaginaos que aquí tengo otro. 1025 00:39:29,099 --> 00:39:30,739 Todo eso lo hace el tríceps por dentro, no nosotros. 1026 00:39:30,980 --> 00:39:32,519 ¿A qué te refieres con que sea mayor o menor? 1027 00:39:32,980 --> 00:39:35,019 Mayor según un criterio de orden que hay que darle 1028 00:39:35,019 --> 00:39:37,079 al tríceps. Él no lo sabe. 1029 00:39:38,219 --> 00:39:38,880 Entonces, esa es 1030 00:39:38,880 --> 00:39:40,900 la única diferencia entre el hashel y el tríceps. 1031 00:39:41,239 --> 00:39:41,599 Entonces, 1032 00:39:42,780 --> 00:39:44,980 imaginaos que tengo un tríceps con cuatro elementos. 1033 00:39:45,619 --> 00:39:46,880 Pues mi tríceps internamente 1034 00:39:46,880 --> 00:39:48,639 sería esto. Estas ramitas 1035 00:39:48,639 --> 00:39:50,320 colgando no estarían. Vale. 1036 00:39:51,420 --> 00:39:54,219 Ahora, vamos a meter un quinto elemento. 1037 00:39:55,039 --> 00:39:59,239 Él dice, eso, este elemento es menor que este de aquí, 1038 00:39:59,340 --> 00:40:01,099 si es menor, pues va a tu izquierda. 1039 00:40:01,639 --> 00:40:02,860 Ah, que tienes otro a tu izquierda. 1040 00:40:03,360 --> 00:40:04,099 ¿Es menor o es mayor? 1041 00:40:04,239 --> 00:40:06,039 Ah, no, es mayor que este, pues va a tu derecha. 1042 00:40:06,559 --> 00:40:09,099 Y ya está, ya no tiene más, pues ahí lo coloca. 1043 00:40:09,800 --> 00:40:11,780 Los va colocando siguiendo un criterio de orden. 1044 00:40:12,780 --> 00:40:16,659 Ahora me preguntaríais, ¿qué criterio de orden? 1045 00:40:18,280 --> 00:40:20,500 El criterio de orden, un segundo, 1046 00:40:20,500 --> 00:40:22,699 el criterio de orden que estos objetos 1047 00:40:22,699 --> 00:40:23,420 pedido 1048 00:40:23,420 --> 00:40:25,880 tengan dentro. 1049 00:40:26,539 --> 00:40:28,420 Con lo cual, si tú quieres hacer un triset, 1050 00:40:28,940 --> 00:40:31,019 los objetos 1051 00:40:31,019 --> 00:40:32,539 que tú vayas a meter en el triset tienen que tener 1052 00:40:32,539 --> 00:40:33,440 un criterio de orden. 1053 00:40:34,900 --> 00:40:36,679 Claro, porque esa es la forma de tener un criterio de orden. 1054 00:40:37,300 --> 00:40:37,679 Luego, 1055 00:40:38,420 --> 00:40:39,579 imaginaos que 1056 00:40:39,579 --> 00:40:42,019 yo tengo aquí pedido 1057 00:40:42,019 --> 00:40:44,019 y este pedido mío 1058 00:40:44,019 --> 00:40:46,159 no tiene 1059 00:40:46,159 --> 00:40:47,860 comparable porque no tiene, 1060 00:40:48,099 --> 00:40:50,320 porque no me da a mí la gana y no lo necesito. 1061 00:40:50,500 --> 00:40:52,739 Y no quiero comparable ni quiero nada. 1062 00:40:53,659 --> 00:41:04,880 Vale, pues entonces, no tiene comparable y no tiene este método de aquí. 1063 00:41:10,280 --> 00:41:10,960 ¿Qué pasa? 1064 00:41:12,239 --> 00:41:13,559 Están dejando rectas cosas. 1065 00:41:14,559 --> 00:41:14,800 ¿Eh? 1066 00:41:14,960 --> 00:41:16,380 Están dejando rectas cosas. 1067 00:41:17,519 --> 00:41:18,039 ¿Rectas? 1068 00:41:19,260 --> 00:41:20,119 ¿Qué dices? 1069 00:41:21,280 --> 00:41:24,300 Bueno, vale, entonces, pedido no tiene comparable. 1070 00:41:24,300 --> 00:41:26,599 entonces yo llego a mi main de pruebas 1071 00:41:26,599 --> 00:41:28,579 y digo, ay me voy a hacer un 1072 00:41:28,579 --> 00:41:29,980 triset que me han dicho que es 1073 00:41:29,980 --> 00:41:31,880 magnífico 1074 00:41:31,880 --> 00:41:34,800 voy a decidir un triset 1075 00:41:34,800 --> 00:41:37,280 pues venga, un triset de pedido 1076 00:41:37,280 --> 00:41:40,119 porque quiero yo un triset de pedidos 1077 00:41:40,119 --> 00:41:41,639 porque me han dicho que es súper guay 1078 00:41:41,639 --> 00:41:43,820 súper eficiente y súper la leche 1079 00:41:43,820 --> 00:41:45,519 ¿quién te ha dicho eso? 1080 00:41:46,119 --> 00:41:46,579 Estefan 1081 00:41:46,579 --> 00:41:47,860 no 1082 00:41:47,860 --> 00:41:57,980 vale, pues entonces 1083 00:41:57,980 --> 00:42:00,179 yo me digo, que guay 1084 00:42:00,179 --> 00:42:01,639 voy a meter en pedidos 1085 00:42:01,639 --> 00:42:04,599 voy a meter un pedido que me da a mi la gana 1086 00:42:04,599 --> 00:42:06,019 este mismo que tengo por arriba 1087 00:42:06,019 --> 00:42:06,880 declarado 1088 00:42:06,880 --> 00:42:09,099 y que guay con mi triset 1089 00:42:09,099 --> 00:42:11,579 entonces yo ejecuto esto 1090 00:42:11,579 --> 00:42:15,559 ah bueno, es que me ha salido el anterior 1091 00:42:15,559 --> 00:42:16,760 vale, entonces 1092 00:42:16,760 --> 00:42:19,460 entonces ya ha parado, vamos a comentar esto 1093 00:42:19,460 --> 00:42:21,260 para que nos salga el error de antes 1094 00:42:21,260 --> 00:42:23,639 vale, ejecuto 1095 00:42:23,639 --> 00:42:24,440 esto y me dice 1096 00:42:24,440 --> 00:42:27,280 que pedido 1097 00:42:27,280 --> 00:42:28,599 que pedido 1098 00:42:28,599 --> 00:42:31,920 no es comparable amigo mío 1099 00:42:31,920 --> 00:42:33,639 te dice, perdona 1100 00:42:33,639 --> 00:42:35,139 yo no puedo hacer un triset 1101 00:42:35,139 --> 00:42:37,659 de alguien que no 1102 00:42:37,659 --> 00:42:39,559 sea comparable, porque yo como triset 1103 00:42:39,559 --> 00:42:41,619 me dio el criterio de orden para decir si vas a la derecha 1104 00:42:41,619 --> 00:42:42,420 a la izquierda, etcétera 1105 00:42:42,420 --> 00:42:45,539 ya 1106 00:42:45,539 --> 00:42:47,199 hasta puedo decirme, no, ¿para qué más 1107 00:42:47,199 --> 00:42:48,559 como a tal comparable, hijoputa? 1108 00:42:48,780 --> 00:42:50,760 pues no, es lo siguiente que voy a haber dicho 1109 00:42:50,760 --> 00:43:01,820 es que, a ver, mi generación es de los 80 1110 00:43:01,820 --> 00:43:03,679 entiende que no tenemos ningún tipo de moral 1111 00:43:03,679 --> 00:43:07,659 fuimos educados en el absoluto libertinaje 1112 00:43:07,659 --> 00:43:09,559 si te cuento lo que yo vi de niña 1113 00:43:09,559 --> 00:43:10,840 la roja me entiende cuando le he dicho 1114 00:43:10,840 --> 00:43:13,179 eso, claro 1115 00:43:13,179 --> 00:43:15,420 no como vosotros que ya habéis sido educados 1116 00:43:15,420 --> 00:43:19,119 en una cultura más reaccionaria 1117 00:43:19,119 --> 00:43:19,840 la mía es otra 1118 00:43:19,840 --> 00:43:22,179 bueno, a ver 1119 00:43:22,179 --> 00:43:24,559 vamos a ver, entonces claro 1120 00:43:24,559 --> 00:43:26,300 pedido tiene que ser comparable 1121 00:43:26,300 --> 00:43:29,320 imaginaos que yo no puedo irme a pedido 1122 00:43:29,320 --> 00:43:31,300 porque pedido está en un paquete modelo 1123 00:43:31,300 --> 00:43:33,440 que es la entidad de mi aplicación 1124 00:43:33,440 --> 00:43:34,760 y me dicen que no toques eso 1125 00:43:34,760 --> 00:43:36,000 porque eso lo usa mucha gente 1126 00:43:36,000 --> 00:43:38,940 pues estaría fastidiada para hacer el triset 1127 00:43:38,940 --> 00:43:40,440 en realidad no 1128 00:43:40,440 --> 00:43:41,719 porque triset 1129 00:43:41,719 --> 00:43:44,440 admite que yo en el constructor 1130 00:43:44,440 --> 00:43:47,840 le dé el comparator ese 1131 00:43:47,840 --> 00:43:49,400 otra vez, el rastreator 1132 00:43:49,400 --> 00:43:51,780 que de nuevo ahora mismo lo dejamos en el aire 1133 00:43:51,780 --> 00:43:53,880 admite que yo diga 1134 00:43:53,880 --> 00:43:55,699 uy, mira, pedido no es comparable 1135 00:43:55,699 --> 00:43:57,679 lo siento muchísimo, pero tú 1136 00:43:57,679 --> 00:44:00,139 para tu uso interno de tu arbolito 1137 00:44:00,139 --> 00:44:01,960 usa este criterio que te voy a dar 1138 00:44:01,960 --> 00:44:02,360 yo aquí 1139 00:44:02,360 --> 00:44:03,940 ¿vale? 1140 00:44:07,079 --> 00:44:07,739 pero porque 1141 00:44:07,739 --> 00:44:09,800 preguntas, yo no iba a mencionar esto hasta que no 1142 00:44:09,800 --> 00:44:11,260 lo habíamos encontrado 1143 00:44:11,260 --> 00:44:13,820 pero me ha dicho, menciónalo aunque no lo vayas a explicar 1144 00:44:14,059 --> 00:44:14,840 Pues yo lo menciono. 1145 00:44:15,800 --> 00:44:16,239 ¿Vale? 1146 00:44:16,820 --> 00:44:20,119 Entonces, podríamos aún así hacer un pedido sin implementar 1147 00:44:20,119 --> 00:44:20,619 comparable. 1148 00:44:21,260 --> 00:44:23,860 Le decimos aquí, usa este criterio de orden. 1149 00:44:23,980 --> 00:44:26,059 Pero como todavía no sabemos hacer criterios de orden 1150 00:44:26,059 --> 00:44:28,920 comparator independientes del mundo de cualquier entidad, 1151 00:44:29,039 --> 00:44:31,440 como todavía no sabemos, no se lo vamos a dar por ahí. 1152 00:44:32,059 --> 00:44:34,820 Sino que vamos a decir, ah, venga, pues pedido tú, 1153 00:44:34,920 --> 00:44:36,019 que seas comparable. 1154 00:44:39,349 --> 00:44:39,750 Ahí. 1155 00:44:41,570 --> 00:44:43,110 Tú ahora ya eres comparable. 1156 00:44:43,110 --> 00:44:46,389 implementas 1157 00:44:46,389 --> 00:44:49,480 comparable 1158 00:44:49,480 --> 00:44:52,159 y ahora ya 1159 00:44:52,159 --> 00:44:54,159 el triset magnífico 1160 00:44:54,159 --> 00:44:56,179 y ya está 1161 00:44:56,179 --> 00:44:58,159 y lo usamos igual 1162 00:44:58,159 --> 00:44:59,039 que cualquier set 1163 00:44:59,039 --> 00:45:06,239 claro, ¿qué es lo que ganamos con el triset 1164 00:45:06,239 --> 00:45:07,460 si es que eso nos interesa? 1165 00:45:08,739 --> 00:45:10,119 lo que ganamos es que como 1166 00:45:10,119 --> 00:45:12,179 él va metiendo, los va metiendo ordenaditos 1167 00:45:12,179 --> 00:45:14,380 luego él itera con ese orden 1168 00:45:14,380 --> 00:45:17,579 entonces el orden de iteración 1169 00:45:17,579 --> 00:45:18,940 va a ser 1170 00:45:18,940 --> 00:45:21,019 el orden del criterio de ordenación 1171 00:45:21,019 --> 00:45:21,619 del comparable 1172 00:45:21,619 --> 00:45:23,860 luego 1173 00:45:23,860 --> 00:45:26,980 recopilando un segundo 1174 00:45:26,980 --> 00:45:29,659 hashSet, linkedHashSet 1175 00:45:29,659 --> 00:45:31,280 y triset, los tres son 1176 00:45:31,280 --> 00:45:33,219 conjuntos, luego los tres 1177 00:45:33,219 --> 00:45:35,440 comparten que no hay una posición 1178 00:45:35,440 --> 00:45:37,320 asociada a cada elemento 1179 00:45:37,320 --> 00:45:39,400 eso está claro, luego yo no puedo 1180 00:45:39,400 --> 00:45:41,900 recuperar por posición con getIndex 1181 00:45:41,900 --> 00:45:43,380 no puedo recorrer con un 1182 00:45:43,380 --> 00:45:45,460 de índice, por tanto, no puedo borrar 1183 00:45:45,460 --> 00:45:47,099 por posición con remove index 1184 00:45:47,099 --> 00:45:48,980 no puedo sacar el 1185 00:45:48,980 --> 00:45:51,400 index of un elemento porque no 1186 00:45:51,400 --> 00:45:52,980 hay una posición en la que ese elemento está 1187 00:45:52,980 --> 00:45:54,699 eso es lo que comparto, vale 1188 00:45:54,699 --> 00:45:56,380 ahora, ¿cuál elijo? 1189 00:45:56,980 --> 00:45:58,820 haset es el más eficiente, vale 1190 00:45:58,820 --> 00:46:01,260 el más eficiente y a su vez el más 1191 00:46:01,260 --> 00:46:02,820 básico a la hora de lo que me ofrece 1192 00:46:02,820 --> 00:46:05,360 ¿qué me ofrece? meter las cosas ahí 1193 00:46:05,360 --> 00:46:06,679 y ya está 1194 00:46:06,679 --> 00:46:09,039 y yo puedo iterar por él con el for each 1195 00:46:09,039 --> 00:46:11,099 y el orden en el que itero 1196 00:46:11,099 --> 00:46:13,260 no va a ser ni el orden 1197 00:46:13,260 --> 00:46:15,300 de inserción y ningún tipo de orden. 1198 00:46:15,579 --> 00:46:17,480 Será el que sea. Y a mí me da igual 1199 00:46:17,480 --> 00:46:18,940 porque no me importa en mi aplicación. 1200 00:46:19,739 --> 00:46:19,920 ¿Vale? 1201 00:46:20,820 --> 00:46:23,260 Linked HACET. ¿Qué aporta respecto 1202 00:46:23,260 --> 00:46:24,800 a HACET? Es lo mismito, 1203 00:46:25,300 --> 00:46:26,559 pero cuando yo itero, 1204 00:46:27,500 --> 00:46:29,039 el orden en el que él me los saca 1205 00:46:29,039 --> 00:46:31,500 es el mismo en el que los inserté. 1206 00:46:32,420 --> 00:46:33,219 En el que los 1207 00:46:33,219 --> 00:46:35,460 inserté. Ya está. Es lo único que me aporta. 1208 00:46:35,460 --> 00:46:36,599 Si eso me interesa, genial. 1209 00:46:37,539 --> 00:46:39,500 TRICET. ¿Qué me aporta? Que es muy 1210 00:46:39,500 --> 00:46:41,440 eficiente y está muy bien porque un árbol binario 1211 00:46:41,440 --> 00:46:43,519 es un grafo muy fácil 1212 00:46:43,519 --> 00:46:45,260 de manejar computacionalmente 1213 00:46:45,260 --> 00:46:47,340 o sea, computacionalmente, luego 1214 00:46:47,340 --> 00:46:48,199 programar en él no 1215 00:46:48,199 --> 00:46:51,639 es fácil de, es computacionalmente 1216 00:46:51,639 --> 00:46:52,900 eficiente, me aporta eso 1217 00:46:52,900 --> 00:46:54,880 y a la hora de usarlo 1218 00:46:54,880 --> 00:46:57,360 implica que cuando yo uso 1219 00:46:57,360 --> 00:46:59,619 un triset, los objetos 1220 00:46:59,619 --> 00:47:01,340 que meto tienen que tener un criterio 1221 00:47:01,340 --> 00:47:03,480 de orden, que ese criterio de orden 1222 00:47:03,480 --> 00:47:04,719 normalmente los fijaremos 1223 00:47:04,719 --> 00:47:07,239 haciendo que esa clase implemente el 1224 00:47:07,239 --> 00:47:09,400 comparable, implementa el comparable 1225 00:47:09,400 --> 00:47:10,340 a partir de ahí 1226 00:47:10,340 --> 00:47:12,880 el triset me los mete 1227 00:47:12,880 --> 00:47:14,739 en el orden según el comparado 1228 00:47:14,739 --> 00:47:16,760 y ya está, todo lo demás 1229 00:47:16,760 --> 00:47:18,820 lo uso para lo mismo, add, remove 1230 00:47:18,820 --> 00:47:20,400 lo que sea, que 1231 00:47:20,400 --> 00:47:22,940 particularidad obtengo, que cuando 1232 00:47:22,940 --> 00:47:24,760 yo itero con un for each, que es mi forma 1233 00:47:24,760 --> 00:47:26,940 de iterar con un conjunto, porque for de índice 1234 00:47:26,940 --> 00:47:29,059 no tengo, cuando yo itero con un for each 1235 00:47:29,059 --> 00:47:30,760 el orden al que me los va sacando 1236 00:47:30,760 --> 00:47:33,039 es el orden del comparable 1237 00:47:33,039 --> 00:47:34,679 no el de inserción 1238 00:47:34,679 --> 00:47:37,300 sino el orden del comparable 1239 00:47:37,300 --> 00:47:38,920 porque él me los va 1240 00:47:38,920 --> 00:47:39,940 sacando del arbolito 1241 00:47:39,940 --> 00:47:41,840 de hecho 1242 00:47:41,840 --> 00:47:43,840 si nosotros aquí 1243 00:47:43,840 --> 00:47:46,659 por ejemplo, en mi 1244 00:47:46,659 --> 00:47:48,699 vamos a meter estos 1245 00:47:48,699 --> 00:47:50,679 tres pedidos otra vez en el tríceps 1246 00:47:50,679 --> 00:47:59,210 vale 1247 00:47:59,210 --> 00:48:08,400 mi criterio del comparable 1248 00:48:08,400 --> 00:48:10,760 era el índice, 3, 1 y 2 1249 00:48:10,760 --> 00:48:12,239 era el 1250 00:48:12,239 --> 00:48:13,780 el id, perdón, era el id 1251 00:48:13,780 --> 00:48:15,539 entonces yo lo he metido así 1252 00:48:15,539 --> 00:48:18,360 en un linked hashed la iteración sería 1253 00:48:18,360 --> 00:48:19,840 la misma, 3, 1, 2 1254 00:48:19,840 --> 00:48:21,219 En un triset 1255 00:48:21,219 --> 00:48:23,639 Yo ahora itero en un triset 1256 00:48:23,639 --> 00:48:28,559 Y me va a salir ordenado 1257 00:48:28,559 --> 00:48:32,739 Si es que eso me importa y me interesa 1258 00:48:32,739 --> 00:48:33,619 Pues ya está 1259 00:48:33,619 --> 00:48:41,860 Yo ejecuto esto 1260 00:48:41,860 --> 00:48:44,489 Y 1261 00:48:44,489 --> 00:48:47,230 Ya con tantos 1262 00:48:47,230 --> 00:48:49,369 No sé ni dónde estoy 1263 00:48:49,369 --> 00:48:58,730 Vamos a 1264 00:48:58,730 --> 00:49:05,280 Ah, en pedidos dos, claro 1265 00:49:05,280 --> 00:49:06,920 Es que ya decía yo, no me los ha sacado ordenados 1266 00:49:06,920 --> 00:49:08,920 Que estaba iterando en la otra, no entendía nada 1267 00:49:08,920 --> 00:49:10,699 vale, en pedidos 2 1268 00:49:10,699 --> 00:49:12,039 si Tero en pedidos 2 1269 00:49:12,039 --> 00:49:14,320 pues efectivamente 1270 00:49:14,320 --> 00:49:15,920 1, 2 y 3 1271 00:49:15,920 --> 00:49:18,380 me los saca ordenados según el orden 1272 00:49:18,380 --> 00:49:20,179 no de insercio 1273 00:49:20,179 --> 00:49:22,820 sino el orden del criterio del comparado 1274 00:49:22,820 --> 00:49:24,360 ¿vale? 1275 00:49:24,519 --> 00:49:24,760 entonces 1276 00:49:24,760 --> 00:49:29,199 pues al comparable le cambias 1277 00:49:29,199 --> 00:49:31,800 ah bueno, espérate 1278 00:49:31,800 --> 00:49:33,760 que estaba por orden de precio 1279 00:49:33,760 --> 00:49:35,539 que tontería 1280 00:49:35,539 --> 00:49:38,059 sí, por precio 1281 00:49:38,059 --> 00:49:40,119 debe ser que coincide, que ha coincidido 1282 00:49:40,119 --> 00:49:41,099 porque 1283 00:49:41,099 --> 00:49:42,559 a ver, a ejecutar 1284 00:49:42,559 --> 00:49:45,960 a la ejecución que la tengo aquí 1285 00:49:45,960 --> 00:49:48,380 1, 2 y 3, ah, es que coincide 1286 00:49:48,380 --> 00:49:49,400 vale 1287 00:49:49,400 --> 00:49:51,360 ha coincidido el 1288 00:49:51,360 --> 00:49:54,619 vale, está ordenado por orden de precio 1289 00:49:54,619 --> 00:49:56,199 vale 1290 00:49:56,199 --> 00:49:58,179 no, no, no 1291 00:49:58,179 --> 00:50:01,840 vale, pues ya está 1292 00:50:01,840 --> 00:50:03,199 en realidad el triset es esto 1293 00:50:03,199 --> 00:50:06,320 que no nos olvidemos del comparable 1294 00:50:06,320 --> 00:50:08,260 y luego en la iteración tenemos la ventaja 1295 00:50:08,260 --> 00:50:10,400 pero los métodos son pues los mismos 1296 00:50:10,400 --> 00:50:12,300 add, remove, contains 1297 00:50:12,300 --> 00:50:14,119 ya está, nada más que eso 1298 00:50:14,119 --> 00:50:20,039 y respiramos 1299 00:50:20,039 --> 00:50:20,820 hondo un poquito 1300 00:50:20,820 --> 00:50:38,409 a ver, detalles internos de implementación 1301 00:50:38,409 --> 00:50:39,929 es que no te puedo ayudar mucho 1302 00:50:39,929 --> 00:50:42,429 tengo la idea de que es un árbol binario 1303 00:50:42,429 --> 00:50:43,869 y cómo funciona, pero no 1304 00:50:43,869 --> 00:50:46,210 más de eso, de cómo está implementado en concreto 1305 00:50:46,210 --> 00:50:46,710 no 1306 00:50:46,710 --> 00:50:49,530 no sé mucho, no te puedo 1307 00:50:49,530 --> 00:50:51,510 vale, te ibas a preguntar o te estirabas? 1308 00:50:52,510 --> 00:50:52,949 dime 1309 00:50:52,949 --> 00:50:56,250 bueno, a ver 1310 00:50:56,250 --> 00:50:58,030 para empezar es una estructura 1311 00:50:58,030 --> 00:50:59,409 bastante eficiente 1312 00:50:59,409 --> 00:51:02,449 un tríceps se usa bastante 1313 00:51:02,449 --> 00:51:04,250 más que el 1314 00:51:04,250 --> 00:51:05,170 haset, pues 1315 00:51:05,170 --> 00:51:08,110 depende también del código de hash 1316 00:51:08,110 --> 00:51:09,150 como sea, no lo sé 1317 00:51:09,150 --> 00:51:11,929 pero es una estructura que se usa bastante 1318 00:51:11,929 --> 00:51:13,329 con lo cual debe ser que es bastante eficiente 1319 00:51:13,329 --> 00:51:14,789 entonces la usas 1320 00:51:14,789 --> 00:51:16,909 por supuesto cuando 1321 00:51:16,909 --> 00:51:19,829 no quieras, la posición 1322 00:51:19,829 --> 00:51:21,429 no te interese, ¿vale? 1323 00:51:21,449 --> 00:51:22,789 eso está claro, porque si no sabes una lista 1324 00:51:22,789 --> 00:51:25,809 y luego si resulta que a ti el orden 1325 00:51:25,809 --> 00:51:27,389 te es interesante 1326 00:51:27,389 --> 00:51:29,449 por ejemplo, tú vas a trabajar 1327 00:51:29,449 --> 00:51:30,469 pues con alumnos 1328 00:51:30,469 --> 00:51:33,909 y te interesan los listados alfabéticos 1329 00:51:33,909 --> 00:51:35,269 pero solo eso 1330 00:51:35,269 --> 00:51:37,429 los listados alfabéticos, entonces tú podrías decir 1331 00:51:37,429 --> 00:51:38,929 Pues lo meto en una lista 1332 00:51:38,929 --> 00:51:40,650 Porque la lista permite hacer el sort 1333 00:51:40,650 --> 00:51:42,409 Pues no te hace falta 1334 00:51:42,409 --> 00:51:44,610 Si lo único que tú quieres en tu aplicación 1335 00:51:44,610 --> 00:51:45,449 Es un listado alfabético 1336 00:51:45,449 --> 00:51:46,469 Y dices, mira, me hago un triset 1337 00:51:46,469 --> 00:51:49,829 El comparable que sea con orden de nombre 1338 00:51:49,829 --> 00:51:52,030 Y para la funcionalidad del listado 1339 00:51:52,030 --> 00:51:53,130 Itero 1340 00:51:53,130 --> 00:51:55,570 Porque sé que el triset me lo va a sacar por orden alfabético 1341 00:51:55,570 --> 00:51:56,170 Por ejemplo 1342 00:51:56,170 --> 00:51:57,289 Y ya está 1343 00:51:57,289 --> 00:52:00,030 A ver 1344 00:52:00,030 --> 00:52:03,670 Cosa importantísima, la más importante del mundo 1345 00:52:03,670 --> 00:52:04,469 Que se me olvidaba 1346 00:52:04,469 --> 00:52:05,809 Del triset 1347 00:52:05,809 --> 00:52:08,809 que el criterio de igualdad del tree set 1348 00:52:08,809 --> 00:52:10,690 para el contains y el remove 1349 00:52:10,690 --> 00:52:12,590 no es el hashCode 1350 00:52:12,590 --> 00:52:14,849 y el equals, es el del compare 1351 00:52:14,849 --> 00:52:15,090 to 1352 00:52:15,090 --> 00:52:20,119 ¿vale? es decir 1353 00:52:20,119 --> 00:52:22,599 yo aquí en tree set 1354 00:52:22,599 --> 00:52:23,579 he puesto pedido 1355 00:52:23,579 --> 00:52:26,019 y entonces he puesto 1356 00:52:26,019 --> 00:52:28,280 un compare to para darle un criterio 1357 00:52:28,280 --> 00:52:30,199 de orden, pues a partir 1358 00:52:30,199 --> 00:52:32,380 de ese momento el tree set 1359 00:52:32,380 --> 00:52:34,059 usa esto 1360 00:52:34,059 --> 00:52:36,360 para saber si un elemento es igual que otro 1361 00:52:36,360 --> 00:52:38,380 ya no usa el Haskell ni el Equals 1362 00:52:38,380 --> 00:52:40,460 pasa de él, usa este 1363 00:52:40,460 --> 00:52:43,340 es que tiene que estar 1364 00:52:43,340 --> 00:52:44,000 porque si no 1365 00:52:44,000 --> 00:52:46,380 no habías podido hacer un tríceps 1366 00:52:46,380 --> 00:52:48,980 porque te habría dado una excepción 1367 00:52:48,980 --> 00:52:50,300 no, no, tienes que ser comparable 1368 00:52:50,300 --> 00:52:51,059 tiene que estar 1369 00:52:51,059 --> 00:52:54,719 entonces, tiene que estar obligatoriamente 1370 00:52:54,719 --> 00:52:55,960 para tú poder hacer un tríceps 1371 00:52:55,960 --> 00:52:57,400 y ahora ya 1372 00:52:57,400 --> 00:53:00,599 este tríceps de aquí 1373 00:53:00,599 --> 00:53:01,719 vamos a ponerlo 1374 00:53:01,719 --> 00:53:03,659 aquí 1375 00:53:03,659 --> 00:53:21,590 esto, aquí tiene unas implicaciones 1376 00:53:21,590 --> 00:53:23,349 muy gordas, y es 1377 00:53:23,349 --> 00:53:25,769 que si yo quisiera meter dos pedidos 1378 00:53:25,769 --> 00:53:27,010 con el mismo precio 1379 00:53:27,010 --> 00:53:29,829 en este ejemplo en particular, que he puesto un compare 1380 00:53:29,829 --> 00:53:32,130 tú con precio, no me dejaría 1381 00:53:32,130 --> 00:53:34,090 porque usa el compare 1382 00:53:34,090 --> 00:53:35,809 tú para no me dejaría 1383 00:53:35,809 --> 00:53:37,150 o sea, tampoco se puede poner 1384 00:53:37,150 --> 00:53:39,349 ni que sea equals, ni que sea 1385 00:53:39,349 --> 00:53:40,849 el criterio de comparación 1386 00:53:40,849 --> 00:53:43,329 no, es que el preset del equals pasa 1387 00:53:43,329 --> 00:53:46,090 como si no existiera, para él la igualdad es el compare 1388 00:53:46,090 --> 00:53:46,369 tú 1389 00:53:46,369 --> 00:53:49,469 ¿vale? porque él ha usado el compare 1390 00:53:49,469 --> 00:53:51,550 tú para colocar, para ver si es mayor o menor 1391 00:53:51,550 --> 00:53:53,269 entonces si encuentra uno 1392 00:53:53,269 --> 00:53:55,389 que es igual, según ese compare 1393 00:53:55,389 --> 00:53:56,690 tú tendría que plantarlo encima 1394 00:53:56,690 --> 00:53:59,570 y encima no va a plantarlo, con lo cual no lo mete 1395 00:53:59,570 --> 00:54:00,710 ¿eh? 1396 00:54:01,769 --> 00:54:03,210 no, no, no, el compare tú 1397 00:54:03,210 --> 00:54:04,670 tú le pasas un objeto 1398 00:54:04,670 --> 00:54:05,730 y 1399 00:54:05,730 --> 00:54:12,110 a ver, el triset 1400 00:54:12,110 --> 00:54:13,989 tiene un equals, pero para ver si un objeto 1401 00:54:13,989 --> 00:54:16,050 triset es igual a otro objeto triset 1402 00:54:16,050 --> 00:54:17,869 que será el equals, el dado de object 1403 00:54:17,869 --> 00:54:19,869 unos hoyos, unos propios, pero vamos 1404 00:54:19,869 --> 00:54:21,789 pero que el método 1405 00:54:21,789 --> 00:54:23,550 equals que él usa para 1406 00:54:23,550 --> 00:54:25,130 los objetos que está metiendo 1407 00:54:25,130 --> 00:54:27,670 no es el equals, es el compare to 1408 00:54:27,670 --> 00:54:29,610 vale, entonces en este caso no 1409 00:54:29,610 --> 00:54:31,869 podríamos meter un elemento 1410 00:54:31,869 --> 00:54:33,369 del mismo precio, vale 1411 00:54:33,369 --> 00:54:35,530 si nosotros intentamos meter 1412 00:54:35,530 --> 00:54:37,469 en pedidos2 1413 00:54:37,469 --> 00:54:39,590 add 1414 00:54:39,590 --> 00:54:41,289 intentamos meter 1415 00:54:41,289 --> 00:54:42,710 un nuevo pedido 1416 00:54:42,710 --> 00:54:49,639 un nuevo pedido 1417 00:54:49,639 --> 00:54:51,579 este de aquí 1418 00:54:51,579 --> 00:54:53,820 con id 4 1419 00:54:53,820 --> 00:54:56,460 claro, el precio es el mismo 1420 00:54:56,460 --> 00:54:58,480 que uno que ya existe, 3,6 1421 00:54:58,480 --> 00:55:00,179 entonces 1422 00:55:00,179 --> 00:55:05,619 si volvemos a iterar 1423 00:55:05,619 --> 00:55:12,019 he iterado bien, sí, vale 1424 00:55:12,019 --> 00:55:13,820 lo que pasa es que estoy haciéndolo tan feo 1425 00:55:13,820 --> 00:55:16,079 ay, que he guardado, vale 1426 00:55:16,079 --> 00:55:17,900 que ya no, vale 1427 00:55:17,900 --> 00:55:19,659 ¿veis? 1428 00:55:21,000 --> 00:55:22,420 esta es la última iteración 1429 00:55:22,420 --> 00:55:24,400 no me ha metido 1430 00:55:24,400 --> 00:55:26,820 el 3,6 no me lo ha metido dos veces 1431 00:55:26,820 --> 00:55:29,460 o sea, ha ignorado 1432 00:55:29,460 --> 00:55:30,420 eso 1433 00:55:30,420 --> 00:55:33,239 vale, entonces claro, eso 1434 00:55:33,239 --> 00:55:35,320 por eso 1435 00:55:35,320 --> 00:55:37,480 claro, por eso hay que 1436 00:55:37,480 --> 00:55:39,260 pensarse muy mucho este compare tú 1437 00:55:39,260 --> 00:55:40,280 que uno pone en pedido 1438 00:55:40,280 --> 00:55:43,400 porque es el compare tú, te limita 1439 00:55:43,400 --> 00:55:45,739 luego usarlo en un tríceps, porque es el criterio de igualdad 1440 00:55:45,739 --> 00:55:49,599 claro, luego aquí se dan 1441 00:55:49,599 --> 00:55:51,519 se dan 1442 00:55:51,519 --> 00:55:52,739 muchas situaciones a resolver 1443 00:55:52,739 --> 00:55:58,219 A ver, por ejemplo, a ti a lo mejor aquí te interesa un compare tú por nombre. 1444 00:55:58,980 --> 00:56:02,840 Pero luego tú quieres en un triset meter pedidos con diferente nombre. 1445 00:56:03,760 --> 00:56:08,719 Entonces, o no usas un triset o si usas un triset le dices, 1446 00:56:09,739 --> 00:56:13,599 oye triset, te voy a dar, ¿dónde estamos con el triset? 1447 00:56:14,219 --> 00:56:18,159 Te voy a dar un criterio específico. 1448 00:56:18,380 --> 00:56:20,019 No uses el del compare tú. 1449 00:56:20,019 --> 00:56:22,260 Ya estamos otra vez, pero eso. 1450 00:56:22,739 --> 00:56:24,179 Ahora mismo lo dejamos aparcado. 1451 00:56:24,639 --> 00:56:27,739 Pero la idea es que al tríset, como ya he dicho antes, 1452 00:56:27,820 --> 00:56:29,860 se le puede dar un criterio específico. 1453 00:56:30,119 --> 00:56:31,440 Y ese es el que va a usar siempre. 1454 00:56:32,039 --> 00:56:34,860 Si hubiera ya uno en la clase, porque implementar a compare 1455 00:56:34,860 --> 00:56:36,340 y un compare tú, entonces ese se le ignoraría. 1456 00:56:36,860 --> 00:56:38,199 Pesa más el que pongamos ahí. 1457 00:56:38,360 --> 00:56:39,239 Ese que tiene prioridad. 1458 00:56:40,280 --> 00:56:42,280 Entonces, como tú te ves en una situación en la cual la clase 1459 00:56:42,280 --> 00:56:44,420 pide, tiene ya un comparable con un compare tú, 1460 00:56:45,079 --> 00:56:47,860 pero a ti ese te fastidia porque entonces te impediría 1461 00:56:47,860 --> 00:56:49,199 meter objetos en el tríset. 1462 00:56:49,960 --> 00:56:51,239 Pues le das otro ahí. 1463 00:56:51,239 --> 00:56:52,960 le das otro, diferente 1464 00:56:52,960 --> 00:56:55,280 ¿vale? pero ¿cómo darle otro? eso es lo que ya 1465 00:56:55,280 --> 00:56:56,000 olvidamos 1466 00:56:56,000 --> 00:56:58,619 ¿vale? ¿cómo darle otro? por ahora 1467 00:56:58,619 --> 00:57:01,559 si no le damos otro ahí y lo damos en vacío 1468 00:57:01,559 --> 00:57:03,219 el criterio que va a usar el 1469 00:57:03,219 --> 00:57:04,219 triset va a ser 1470 00:57:04,219 --> 00:57:06,860 este, para la igualdad 1471 00:57:06,860 --> 00:57:09,280 si un objeto es igual que 1472 00:57:09,280 --> 00:57:11,219 otro, o sea, si un objeto devuelve 1473 00:57:11,219 --> 00:57:13,019 cero en el compare to, devuelve cero 1474 00:57:13,019 --> 00:57:15,019 para el triset es el mismo 1475 00:57:15,019 --> 00:57:17,280 entonces, ojo con lo que 1476 00:57:17,280 --> 00:57:18,780 hemos puesto aquí, porque en este caso 1477 00:57:18,780 --> 00:57:21,099 todos los pedidos que cuestan lo mismo 1478 00:57:21,099 --> 00:57:23,099 son iguales, solo, solo, solo 1479 00:57:23,099 --> 00:57:25,619 el triset es el único que usa eso 1480 00:57:25,619 --> 00:57:26,719 solo, ¿vale? 1481 00:57:26,760 --> 00:57:28,920 todos los objetos que tengan el mismo precio 1482 00:57:28,920 --> 00:57:31,280 serían todos iguales, luego usar un triset 1483 00:57:31,280 --> 00:57:33,260 para pedidos así, pues no tendría sentido 1484 00:57:33,260 --> 00:57:34,760 porque no puedo tener pedidos con el mismo precio 1485 00:57:34,760 --> 00:57:39,159 claro, en función de lo que tengas ahí 1486 00:57:39,159 --> 00:57:40,280 ¿vale? 1487 00:57:41,800 --> 00:57:43,360 pues triset al 1488 00:57:43,360 --> 00:57:45,760 completo, completísimo 1489 00:57:45,760 --> 00:57:46,840 y todo 1490 00:57:46,840 --> 00:57:47,760 ¿vale? 1491 00:57:51,570 --> 00:57:53,329 uy, un pedido 1492 00:57:53,329 --> 00:57:55,329 Un repaso rápido de map 1493 00:57:55,329 --> 00:57:56,389 Y nos vamos ya a gusto 1494 00:57:56,389 --> 00:57:57,949 Con todo 1495 00:57:57,949 --> 00:57:59,989 Sí, así podemos dedicar jueves y viernes 1496 00:57:59,989 --> 00:58:01,309 A ejercicios y ejercicios 1497 00:58:01,309 --> 00:58:04,269 Y hacéis ya el examen 1498 00:58:04,269 --> 00:58:05,550 Que te cagas 1499 00:58:05,550 --> 00:58:11,050 A ver 1500 00:58:11,050 --> 00:58:12,389 ¿Qué? 1501 00:58:16,929 --> 00:58:18,150 Ya, pero bueno 1502 00:58:18,150 --> 00:58:20,630 Es una recopilación un poco de 1503 00:58:20,630 --> 00:58:24,769 Vale, pues entonces reencuéntrate 1504 00:58:24,769 --> 00:58:26,429 Porque como ahora vamos a hacer el repaso de map 1505 00:58:26,429 --> 00:58:27,530 Te puedes olvidar de lo anterior 1506 00:58:27,530 --> 00:58:28,769 Y 1507 00:58:28,769 --> 00:58:30,750 Vale 1508 00:58:30,750 --> 00:58:35,699 Último método, prueba mapas 1509 00:58:35,699 --> 00:58:37,440 Y nos piramos 1510 00:58:37,440 --> 00:58:52,949 Vale 1511 00:58:52,949 --> 00:58:55,789 Problema del haset 1512 00:58:55,789 --> 00:58:58,050 Que bonito y que estupendo y que maravilloso 1513 00:58:58,590 --> 00:59:02,190 Pues que hay que recorrerlo para cualquier cosa 1514 00:59:02,190 --> 00:59:03,789 ¿Verdad? Por ejemplo aquí 1515 00:59:03,789 --> 00:59:06,030 Esto que hemos hecho antes 1516 00:59:06,030 --> 00:59:11,010 que queremos ver 1517 00:59:11,010 --> 00:59:14,110 qué elementos tienen como descripción 1518 00:59:14,110 --> 00:59:16,250 bolis para borrarlos 1519 00:59:16,250 --> 00:59:17,909 por ejemplo, pues lo recorro 1520 00:59:17,909 --> 00:59:19,250 aunque esto en particular me daría error 1521 00:59:19,250 --> 00:59:22,090 que quiero, imaginaos que lo que 1522 00:59:22,090 --> 00:59:24,170 queremos es en lugar de borrar 1523 00:59:24,170 --> 00:59:24,909 todos los 1524 00:59:24,909 --> 00:59:27,730 bolis, pues cambiar de precio 1525 00:59:27,730 --> 00:59:30,250 a los bolis, pues haríamos eso 1526 00:59:30,250 --> 00:59:32,210 por ejemplo, imaginamos que queremos 1527 00:59:32,210 --> 00:59:34,110 cambiar de precio a todos los bolis 1528 00:59:34,110 --> 00:59:36,269 al pedido bolis, tendríamos que 1529 00:59:36,269 --> 00:59:37,969 recorrer bolis, una vez que hemos 1530 00:59:37,969 --> 00:59:40,329 encontrado bolis, pues ya haríamos 1531 00:59:40,329 --> 00:59:43,969 pet.setPrecio 1532 00:59:43,969 --> 00:59:45,769 el precio que fuera. 1533 00:59:48,559 --> 00:59:49,760 No, porque 1534 00:59:49,760 --> 00:59:51,760 aquí no estoy, claro, aquí no tengo 1535 00:59:51,760 --> 00:59:53,800 otro bucle anidado. Vale, entonces 1536 00:59:53,800 --> 00:59:55,639 problema de los conjuntos, 1537 00:59:56,199 --> 00:59:57,780 ya no solo del haset, de todos 1538 00:59:57,780 --> 00:59:58,880 los conjuntos en general. 1539 00:59:59,579 --> 01:00:01,480 Que si yo quiero localizar 1540 01:00:01,480 --> 01:00:03,840 un objeto en concreto para hacer 1541 01:00:03,840 --> 01:00:05,579 algo con él, como este, 1542 01:00:05,760 --> 01:00:07,900 localizar el objeto cuya descripción es bolis 1543 01:00:07,900 --> 01:00:08,920 para cambiar el precio, 1544 01:00:08,920 --> 01:00:11,000 tengo que sacarlos todos 1545 01:00:11,000 --> 01:00:12,920 que quiero localizar el objeto 1546 01:00:12,920 --> 01:00:15,079 cuyo ID es 5, tengo que ir 1547 01:00:15,079 --> 01:00:16,159 uno por uno hasta que lo encuentro 1548 01:00:16,159 --> 01:00:19,159 que quiero localizar el objeto cuyo precio es 7 1549 01:00:19,159 --> 01:00:21,059 tengo que ir uno por uno hasta que lo encuentro 1550 01:00:21,059 --> 01:00:22,599 un rollo, ¿vale? 1551 01:00:23,119 --> 01:00:24,840 entonces, para no tener que ir uno por uno 1552 01:00:24,840 --> 01:00:26,920 hasta que encuentro el que me interesa 1553 01:00:26,920 --> 01:00:29,139 es para lo que se hicieron 1554 01:00:29,139 --> 01:00:30,380 los mapas, ¿vale? 1555 01:00:31,360 --> 01:00:31,880 entonces 1556 01:00:31,880 --> 01:00:37,280 pues la interfaz map 1557 01:00:37,280 --> 01:00:39,019 esta interfaz 1558 01:00:39,019 --> 01:00:41,960 es una interfaz aparte de collection 1559 01:00:41,960 --> 01:00:48,480 y es una colección 1560 01:00:48,480 --> 01:00:56,639 para guardar objetos 1561 01:00:56,639 --> 01:00:59,400 con una clave asociada. 1562 01:01:00,719 --> 01:01:01,760 Entonces, ¿qué implica esto? 1563 01:01:02,199 --> 01:01:05,519 Lo que implica esto, a efectos prácticos, 1564 01:01:05,519 --> 01:01:08,400 es que lo que se guarda es un par. 1565 01:01:12,829 --> 01:01:13,869 Un par así. 1566 01:01:14,909 --> 01:01:15,889 Clave, valor. 1567 01:01:16,670 --> 01:01:19,670 Entonces, meter algo en el map es siempre meter un par. 1568 01:01:19,670 --> 01:01:21,869 Tengo que meter dos cosas siempre 1569 01:01:21,869 --> 01:01:23,610 Clave y valor 1570 01:01:23,610 --> 01:01:26,530 Lo que se llama en terminología esta clave y valor 1571 01:01:26,530 --> 01:01:28,489 Que será el objeto, este es el objeto 1572 01:01:28,489 --> 01:01:29,110 Efectivamente 1573 01:01:29,110 --> 01:01:31,530 Y la clave que lo asocia 1574 01:01:31,530 --> 01:01:34,449 ¿De qué tipo tiene que ser la clave? ¿De qué tipo es el valor? 1575 01:01:35,010 --> 01:01:36,269 El que a mí me dé la gana cada vez 1576 01:01:36,269 --> 01:01:38,150 Depende, pero siempre que meto algo 1577 01:01:38,150 --> 01:01:39,829 Lo meto en par 1578 01:01:39,829 --> 01:01:42,869 Siempre, no puedo meter un objeto suelto o una clave suelta 1579 01:01:42,869 --> 01:01:44,030 Siempre tiene que ir ahí 1580 01:01:44,030 --> 01:01:46,389 Vale, entonces restricciones 1581 01:01:46,389 --> 01:01:47,670 Las claves 1582 01:01:47,670 --> 01:01:49,570 Tienen que ser únicas 1583 01:01:49,570 --> 01:01:54,969 es decir, no puede haber 1584 01:01:54,969 --> 01:01:57,030 pares en el mapa 1585 01:01:57,030 --> 01:01:58,190 que compartan claves 1586 01:01:58,190 --> 01:02:02,929 en este caso sustituiría 1587 01:02:02,929 --> 01:02:04,849 el objeto con esa clave, no añade otro 1588 01:02:04,849 --> 01:02:06,789 con la misma clave, las claves son únicas 1589 01:02:06,789 --> 01:02:09,329 los objetos sí pueden estar repetidos 1590 01:02:09,329 --> 01:02:10,929 yo puedo meter el mismo 1591 01:02:10,929 --> 01:02:12,989 pedido dos veces, este pedido con la 1592 01:02:12,989 --> 01:02:14,829 clave 1 y el mismo pedido con la clave 2 1593 01:02:14,829 --> 01:02:16,789 el map lo único que va a verificar 1594 01:02:16,789 --> 01:02:19,130 es que no estoy metiendo la misma clave 1595 01:02:19,130 --> 01:02:20,929 dos veces, una segunda vez 1596 01:02:20,929 --> 01:02:21,889 es lo único que va a verificar 1597 01:02:21,889 --> 01:02:23,769 del objeto va a verificar nada 1598 01:02:23,769 --> 01:02:25,989 vale, pues con esta tontería 1599 01:02:25,989 --> 01:02:26,929 del par clave valor 1600 01:02:26,929 --> 01:02:29,690 me facilito recuperar objetos 1601 01:02:29,690 --> 01:02:31,670 porque en lugar de mirarlos todos 1602 01:02:31,670 --> 01:02:33,690 uno por uno, si yo sé la clave 1603 01:02:33,690 --> 01:02:35,570 que tienen asociada, si yo lo sé, digo 1604 01:02:35,570 --> 01:02:37,449 dame el de la clave y tal, y ya está 1605 01:02:37,449 --> 01:02:39,190 ¿vale? entonces 1606 01:02:39,190 --> 01:02:40,750 implementaciones de map 1607 01:02:40,750 --> 01:02:45,920 esa 1608 01:02:45,920 --> 01:02:49,780 implementaciones de map, las que dijimos el otro día 1609 01:02:49,780 --> 01:02:51,880 hash map 1610 01:02:51,880 --> 01:02:53,780 linked 1611 01:02:53,780 --> 01:02:55,139 hash map 1612 01:02:55,139 --> 01:02:57,280 y trimap 1613 01:02:57,280 --> 01:03:00,670 y diréis vosotros 1614 01:03:00,670 --> 01:03:05,030 no, no, eso no, hombre, te sirve para 1615 01:03:05,030 --> 01:03:06,909 con suerte 1616 01:03:06,909 --> 01:03:07,730 ganar dinero en el futuro 1617 01:03:07,730 --> 01:03:09,590 no me apremies 1618 01:03:09,590 --> 01:03:12,750 ¿para qué sirve esto? o sea, no, ya me he liado 1619 01:03:12,750 --> 01:03:12,909 ¿ves? 1620 01:03:14,250 --> 01:03:16,829 ¿qué casualidad que se llamen igual 1621 01:03:16,829 --> 01:03:18,909 que los set? vale, porque 1622 01:03:18,909 --> 01:03:20,389 hashmap 1623 01:03:20,389 --> 01:03:23,010 ¿qué significa? que las claves 1624 01:03:23,010 --> 01:03:24,829 las guarda en un hashet 1625 01:03:24,829 --> 01:03:26,550 LinkedHashMap 1626 01:03:26,550 --> 01:03:27,170 ¿qué significa? 1627 01:03:27,829 --> 01:03:28,769 que las claves 1628 01:03:28,769 --> 01:03:29,710 las guarda 1629 01:03:29,710 --> 01:03:30,230 en un 1630 01:03:30,230 --> 01:03:31,269 LinkedHashSet 1631 01:03:31,269 --> 01:03:32,389 y TrimApp 1632 01:03:32,389 --> 01:03:33,030 ¿qué significa? 1633 01:03:33,510 --> 01:03:34,349 que las claves 1634 01:03:34,349 --> 01:03:35,309 las guarda 1635 01:03:35,309 --> 01:03:35,869 en un TrimApp 1636 01:03:35,869 --> 01:03:36,909 eso es lo que tenemos 1637 01:03:36,909 --> 01:03:37,449 que tener claro 1638 01:03:37,449 --> 01:03:38,409 luego 1639 01:03:38,409 --> 01:03:39,929 automáticamente 1640 01:03:39,929 --> 01:03:41,610 si tú usas 1641 01:03:41,610 --> 01:03:42,210 un HashMap 1642 01:03:42,210 --> 01:03:43,690 la clase 1643 01:03:43,690 --> 01:03:44,530 a la que pertenezca 1644 01:03:44,530 --> 01:03:44,969 la clave 1645 01:03:44,969 --> 01:03:45,409 tiene que tener 1646 01:03:45,409 --> 01:03:46,170 el Hasco de equals 1647 01:03:46,170 --> 01:03:47,849 porque como se va a guardar 1648 01:03:47,849 --> 01:03:48,409 en un HashSet 1649 01:03:48,409 --> 01:03:49,949 la clase 1650 01:03:49,949 --> 01:03:50,369 a la que pertenezca 1651 01:03:50,369 --> 01:03:50,750 el valor 1652 01:03:50,750 --> 01:03:51,550 da lo mismo 1653 01:03:51,550 --> 01:03:54,269 las claves 1654 01:03:54,269 --> 01:03:55,969 a la clase a la que 1655 01:03:55,969 --> 01:03:57,369 pertenezca la clave 1656 01:03:57,369 --> 01:03:58,750 tiene que tener un comparable 1657 01:03:58,750 --> 01:04:01,889 y la igualdad será el compare to 1658 01:04:01,889 --> 01:04:03,670 pero si usas un número no tienes que tener nada 1659 01:04:03,670 --> 01:04:05,989 no porque los integer 1660 01:04:05,989 --> 01:04:07,809 ya tienen, ya implementan comparable 1661 01:04:07,809 --> 01:04:09,090 ellos con el orden natural 1662 01:04:09,090 --> 01:04:12,110 luego cuando usamos un hash map 1663 01:04:12,110 --> 01:04:14,030 un linked hash map y un tree map podemos elegir 1664 01:04:14,030 --> 01:04:15,409 el que queramos pero 1665 01:04:15,409 --> 01:04:17,309 tenemos que acordarnos de eso 1666 01:04:17,309 --> 01:04:19,829 que yo uso un hash map, ahora lo ponemos 1667 01:04:19,829 --> 01:04:22,070 la clase a la que 1668 01:04:22,070 --> 01:04:23,170 pertenezca mi clave 1669 01:04:23,170 --> 01:04:25,710 Tiene que tener hasco de equals 1670 01:04:25,710 --> 01:04:27,809 Lo mismo si hace linked has map 1671 01:04:27,809 --> 01:04:29,690 Si uso un trimap 1672 01:04:29,690 --> 01:04:32,289 La clase a la que pertenezca mi clave 1673 01:04:32,289 --> 01:04:33,510 Tiene que tener 1674 01:04:33,510 --> 01:04:35,730 ¿Es normal usar objetos como clave? 1675 01:04:37,869 --> 01:04:39,889 Pues no, pero normalmente la clave es un valor 1676 01:04:39,889 --> 01:04:41,429 Que tiene que ser rápido de generar 1677 01:04:41,429 --> 01:04:43,510 Entonces normalmente pues que sea un código string 1678 01:04:43,510 --> 01:04:44,250 Un número 1679 01:04:44,250 --> 01:04:47,750 Claro, entonces en ese caso ya lo tienen ellos 1680 01:04:47,750 --> 01:04:48,190 ¿Vale? 1681 01:04:48,809 --> 01:04:51,769 Si usamos un trimap, la clase a la que pertenezca la clave 1682 01:04:51,769 --> 01:04:52,849 Tiene que tener comparable 1683 01:04:52,849 --> 01:04:55,869 porque 3MAP va a usar el compare to 1684 01:04:55,869 --> 01:04:57,369 para ver la igualdad de claves 1685 01:04:57,369 --> 01:04:59,349 para ver la igualdad de claves 1686 01:04:59,349 --> 01:05:02,269 entonces, luego esto se traduce en poca cosa 1687 01:05:02,269 --> 01:05:03,769 vale, por ejemplo 1688 01:05:03,769 --> 01:05:05,230 vamos a guardar los pedidos 1689 01:05:05,230 --> 01:05:05,869 ¿perdón? 1690 01:05:09,869 --> 01:05:11,429 a ver, ¿el qué exactamente? 1691 01:05:15,409 --> 01:05:17,550 sí, a ver 1692 01:05:17,550 --> 01:05:20,070 hashMap, linked hashMap y 3MAP 1693 01:05:20,070 --> 01:05:21,269 tiene que ver 1694 01:05:21,269 --> 01:05:23,710 con cómo guarda 1695 01:05:23,710 --> 01:05:25,929 el mapa las claves 1696 01:05:25,929 --> 01:05:27,130 y sólo las claves. 1697 01:05:28,090 --> 01:05:29,349 En un HashMap 1698 01:05:29,349 --> 01:05:31,730 las claves se guardan en un HashSet. 1699 01:05:32,690 --> 01:05:34,170 En un LinkedHashMap 1700 01:05:34,170 --> 01:05:36,250 las claves se guardan 1701 01:05:36,250 --> 01:05:37,349 en un LinkedHashSet. 1702 01:05:37,909 --> 01:05:40,050 Y en un Trimap las claves 1703 01:05:40,050 --> 01:05:41,469 se guardan en un Triset. 1704 01:05:42,550 --> 01:05:44,010 Y eso tiene implicaciones 1705 01:05:44,010 --> 01:05:46,230 evidentes en que la clase 1706 01:05:46,230 --> 01:05:47,429 a la que pertenezca la clave 1707 01:05:47,429 --> 01:05:49,750 tendrá que tener Hasco de Equals 1708 01:05:49,750 --> 01:05:51,550 en estos primeros casos 1709 01:05:51,550 --> 01:05:53,510 y comparable en este. 1710 01:05:54,010 --> 01:05:55,750 ¿En los dos tríceres Hasco de Equals? 1711 01:05:56,150 --> 01:05:57,090 ¿Hasco de Equals? 1712 01:05:58,309 --> 01:05:59,809 Claro, porque si es un trícer. 1713 01:06:02,440 --> 01:06:03,619 Entonces, por ejemplo, 1714 01:06:03,840 --> 01:06:05,480 en nuestros pedidos famosos. 1715 01:06:07,579 --> 01:06:08,980 Venga, y no nos va a dar tiempo 1716 01:06:08,980 --> 01:06:10,179 a hacer el repaso completo de mapas, 1717 01:06:10,199 --> 01:06:10,639 pero no pasa nada. 1718 01:06:10,679 --> 01:06:11,519 El ejercicio del próximo día 1719 01:06:11,519 --> 01:06:12,440 ya lo tenemos que repasar. 1720 01:06:13,239 --> 01:06:13,639 ¿Vale? 1721 01:06:13,659 --> 01:06:14,840 En nuestros pedidos famosos. 1722 01:06:15,360 --> 01:06:17,960 Por ejemplo, vamos a hacer un Has 1723 01:06:17,960 --> 01:06:20,079 Map 1724 01:06:20,079 --> 01:06:21,739 y ahora 1725 01:06:21,739 --> 01:06:24,559 pedidos 1726 01:06:24,559 --> 01:06:28,530 new hash map 1727 01:06:28,530 --> 01:06:30,070 y ahora de nuevo 1728 01:06:30,070 --> 01:06:30,909 yo tengo que 1729 01:06:30,909 --> 01:06:32,809 decidir aquí 1730 01:06:32,809 --> 01:06:35,030 dos tipos ahora 1731 01:06:35,030 --> 01:06:37,590 el tipo al que pertenece mi clave 1732 01:06:37,590 --> 01:06:39,170 y el tipo al que pertenece mi valor 1733 01:06:39,170 --> 01:06:41,909 mi valor va a ser pedido porque voy a guardar pedidos 1734 01:06:41,909 --> 01:06:42,190 ahí 1735 01:06:42,190 --> 01:06:44,550 pero mi clave 1736 01:06:44,550 --> 01:06:46,230 bueno pues elijo 1737 01:06:46,230 --> 01:06:48,050 un número entero 1738 01:06:48,050 --> 01:06:49,730 un código 1739 01:06:49,730 --> 01:06:52,010 vamos a suponer que un código 1740 01:06:52,010 --> 01:06:54,090 que voy a meter cada apellido asociado a un código 1741 01:06:54,090 --> 01:06:56,309 el código 1742 01:06:56,309 --> 01:06:58,269 si es una cadena pues pondría aquí string 1743 01:06:58,269 --> 01:07:01,480 y ya está 1744 01:07:01,480 --> 01:07:07,900 si pones la id 1745 01:07:07,900 --> 01:07:09,179 como la id es un entero 1746 01:07:09,179 --> 01:07:11,099 pues entonces tendrías que poner aquí 1747 01:07:11,099 --> 01:07:13,920 integer porque tipos primitivos no los puedes usar 1748 01:07:13,920 --> 01:07:14,280 nunca 1749 01:07:14,280 --> 01:07:17,260 para parametrizar datos 1750 01:07:17,260 --> 01:07:19,679 vale, da igual el tipo que pongas 1751 01:07:19,679 --> 01:07:21,219 el que tú decidas porque te interesa a ti 1752 01:07:21,219 --> 01:07:24,639 vale, entonces 1753 01:07:24,639 --> 01:07:27,460 y puede ser una clave que no sea nada 1754 01:07:27,460 --> 01:07:28,420 de lo que está aquí dentro 1755 01:07:28,420 --> 01:07:31,300 no tiene por qué serlo, de hecho vamos a poner 1756 01:07:31,300 --> 01:07:32,840 un string para que sea un código 1757 01:07:32,840 --> 01:07:37,210 entonces, como yo es 1758 01:07:37,210 --> 01:07:39,829 hasma, pues de nuevo lo importamos de java útil 1759 01:07:39,829 --> 01:07:43,360 y ahora 1760 01:07:43,360 --> 01:07:45,360 antes de seguir, tendríamos que verificar 1761 01:07:45,360 --> 01:07:47,519 uy, va a guardar 1762 01:07:47,519 --> 01:07:49,119 las claves en un hash set 1763 01:07:49,119 --> 01:07:51,420 string tiene hash code 1764 01:07:51,420 --> 01:07:53,159 equals, pues sí 1765 01:07:53,159 --> 01:07:55,420 aquí verifica, string no es 1766 01:07:55,420 --> 01:07:57,320 una clase que hemos hecho nosotros, string ya viene 1767 01:07:57,320 --> 01:07:59,460 y tiene su hascode y su equals. Luego nos 1768 01:07:59,460 --> 01:08:01,539 despreocupamos. Si la clave fuera 1769 01:08:01,539 --> 01:08:03,460 de un tipo hecho por nosotros, imaginamos 1770 01:08:03,460 --> 01:08:05,500 que hacemos una clase clave con 1771 01:08:05,500 --> 01:08:07,420 valores que sean la clave. Pues 1772 01:08:07,420 --> 01:08:09,400 tendría que tener hascode equals, porque si no, esto no 1773 01:08:09,400 --> 01:08:11,539 funciona. Vale. En nuestro 1774 01:08:11,539 --> 01:08:12,760 caso, string ya lo tiene y ya está. 1775 01:08:13,360 --> 01:08:15,519 Y ahora aquí ya metemos lo que nos dé la gana. 1776 01:08:15,639 --> 01:08:17,640 Por ejemplo, vamos a 1777 01:08:17,640 --> 01:08:19,439 meter esos pedidos y ya está. 1778 01:08:19,579 --> 01:08:20,640 Voy a copiar esto aquí. 1779 01:08:26,159 --> 01:08:27,800 ¿Cómo metemos? Pues con el 1780 01:08:27,800 --> 01:08:28,140 put. 1781 01:08:29,800 --> 01:08:57,149 Voy a poner esta aquí para copiar y pegar, simplemente, venga, vamos a meter pedidos.put, clave, pues, venga, este va a ser el código, pa, pa, pa, valor, pues, va a ser este, este de aquí, vale, venga, vamos a meter otro. 1782 01:08:57,149 --> 01:09:04,729 Venga, a este le asocio 1783 01:09:04,729 --> 01:09:06,069 A esta clave 1784 01:09:06,069 --> 01:09:08,609 Y voy a meter este otro 1785 01:09:08,609 --> 01:09:10,609 Como si meto el mismo dos veces 1786 01:09:10,609 --> 01:09:11,829 Da igual 1787 01:09:11,829 --> 01:09:13,590 Estará dos veces 1788 01:09:13,590 --> 01:09:15,210 Lo que pasa es que son claves distintas 1789 01:09:15,210 --> 01:09:18,510 Claro, lo importante es que la clave no se repita 1790 01:09:18,510 --> 01:09:20,289 Que el mismo apellido está dos veces 1791 01:09:20,289 --> 01:09:21,189 Con dos claves diferentes 1792 01:09:21,189 --> 01:09:22,390 Pues yo qué sé, tú verás 1793 01:09:22,390 --> 01:09:23,250 Porque lo has metido así 1794 01:09:23,250 --> 01:09:24,649 Será que te interesa 1795 01:09:24,649 --> 01:09:28,550 Claro 1796 01:09:28,550 --> 01:09:30,529 porque el valor puede ser null, la clave no 1797 01:09:30,529 --> 01:09:31,770 la clave no puede ser null 1798 01:09:31,770 --> 01:09:33,970 vale, entonces bueno, esto ya lo borro 1799 01:09:33,970 --> 01:09:35,010 que era para copiar y pegar 1800 01:09:35,010 --> 01:09:38,270 bueno, pues ya tengo ahí los pares 1801 01:09:38,270 --> 01:09:40,069 si yo hiciera esto 1802 01:09:40,069 --> 01:09:46,039 el segundo no lo metería 1803 01:09:46,039 --> 01:09:48,420 el segundo no lo metería 1804 01:09:48,420 --> 01:09:49,579 porque la clave está repetida 1805 01:09:49,579 --> 01:09:52,100 según el jasco de equals de string 1806 01:09:52,100 --> 01:09:56,739 claro, lo que haría sería 1807 01:09:56,739 --> 01:09:58,319 sobrescribirlo 1808 01:09:58,319 --> 01:09:59,779 lo que haría sería 1809 01:09:59,779 --> 01:10:05,579 espérate, no lo tengo muy claro 1810 01:10:05,579 --> 01:10:06,939 porque hay un replace 1811 01:10:06,939 --> 01:10:08,239 vamos a comprobarlo 1812 01:10:08,239 --> 01:10:10,939 es que claviterar 1813 01:10:10,939 --> 01:10:12,880 sí que iba a dejarlo al próximo día porque es muy largo 1814 01:10:12,880 --> 01:10:15,199 vale, pero vamos a ver 1815 01:10:15,199 --> 01:10:17,300 vamos a hacer una cosa, vamos a verlo en la ayuda 1816 01:10:17,300 --> 01:10:18,939 y así nos lo aclara 1817 01:10:18,939 --> 01:10:20,380 porque es que tiene 1818 01:10:20,380 --> 01:10:22,840 vamos a verlo en la ayuda 1819 01:10:22,840 --> 01:10:25,539 a ver si lo reemplaza o no, porque es que como tiene un replace 1820 01:10:25,539 --> 01:10:27,359 creo que 1821 01:10:27,359 --> 01:10:30,300 Sí, vale, lo reemplaza 1822 01:10:30,300 --> 01:10:31,140 Lo reemplaza, vale 1823 01:10:31,140 --> 01:10:32,720 Que me había entrado la duda 1824 01:10:32,720 --> 01:10:35,460 Si el map ya lo tiene, lo reemplaza por ese 1825 01:10:35,460 --> 01:10:36,779 Es como un modifica 1826 01:10:36,779 --> 01:10:37,720 Vale 1827 01:10:37,720 --> 01:10:43,399 Entonces hay que tener cuidado, claro 1828 01:10:43,399 --> 01:10:46,100 Porque él no te avisa de que estás reemplazando nada 1829 01:10:46,100 --> 01:10:48,420 Entonces si no llevas un control de las claves 1830 01:10:48,420 --> 01:10:50,199 O puedes estar pisando algo que no quieres 1831 01:10:50,199 --> 01:10:54,840 Sí, luego, claro 1832 01:10:54,840 --> 01:10:56,000 Uno puede meterse ahí 1833 01:10:56,000 --> 01:10:58,039 hay un montón de métodos, lógicamente, para 1834 01:10:58,039 --> 01:10:59,960 facilitarte. Entonces, claro, ¿qué 1835 01:10:59,960 --> 01:11:01,920 ventaja tiene esto? Que ahora 1836 01:11:01,920 --> 01:11:03,600 que tú quieres eliminar uno, 1837 01:11:04,159 --> 01:11:05,880 pues mucho más fácil que con el set que tenías 1838 01:11:05,880 --> 01:11:07,720 que recorrerlo, o quieres cambiar 1839 01:11:07,720 --> 01:11:09,800 bueno, esto 1840 01:11:09,800 --> 01:11:13,640 lógicamente no, claro, 1841 01:11:14,439 --> 01:11:15,819 que tú quieres recuperar 1842 01:11:15,819 --> 01:11:16,579 el elemento 1843 01:11:16,579 --> 01:11:21,909 este, pues de 1844 01:11:21,909 --> 01:11:24,670 el primero, pues pedidos.get 1845 01:11:24,670 --> 01:11:26,010 y le pones 1846 01:11:26,010 --> 01:11:32,100 la clave. Y no tienes que 1847 01:11:32,100 --> 01:11:34,020 iterar por la colección hasta 1848 01:11:34,020 --> 01:11:35,899 que encuentras aquel cuyo código es 1849 01:11:35,899 --> 01:11:37,000 1, 1, 2, 2 1850 01:11:37,000 --> 01:11:39,479 no tienes que iterar, con el get 1851 01:11:39,479 --> 01:11:40,680 recuperas por clave 1852 01:11:40,680 --> 01:11:43,939 y ya está, pero eso sí, solo puedes recuperar por clave 1853 01:11:43,939 --> 01:11:44,979 ya está 1854 01:11:44,979 --> 01:11:47,539 si muestras pedidos también te muestras todos 1855 01:11:47,539 --> 01:11:49,079 que están en el map 1856 01:11:49,079 --> 01:11:51,479 sí, de hecho se usa 1857 01:11:51,479 --> 01:11:53,939 muchísimo, que quieres eliminar 1858 01:11:53,939 --> 01:11:55,340 facilísimo para eliminar 1859 01:11:55,340 --> 01:11:57,119 tú haces remove 1860 01:11:57,119 --> 01:11:59,359 y le pasas la clave 1861 01:11:59,359 --> 01:12:01,439 y ala, ya está 1862 01:12:01,439 --> 01:12:04,800 entonces si seleccionas bien la clave 1863 01:12:04,800 --> 01:12:06,380 es mucho más 1864 01:12:06,380 --> 01:12:08,520 lo único 1865 01:12:08,520 --> 01:12:09,819 y así que nos vamos es que 1866 01:12:09,819 --> 01:12:12,520 también tenemos que iterar 1867 01:12:12,520 --> 01:12:13,640 por el map, porque hay veces 1868 01:12:13,640 --> 01:12:16,399 que no es por clave por lo que yo quiero hacer cosas 1869 01:12:16,399 --> 01:12:17,819 sino que yo quiero 1870 01:12:17,819 --> 01:12:19,939 elimíname todos los pedidos 1871 01:12:19,939 --> 01:12:21,720 con descripción bolis 1872 01:12:21,720 --> 01:12:24,340 entonces aquí la clave no me vale para nada 1873 01:12:24,340 --> 01:12:26,199 tengo que iterar igualmente 1874 01:12:26,199 --> 01:12:28,199 por los pares hasta que 1875 01:12:28,199 --> 01:12:30,239 encuentre todos cuya descripción sea bolis 1876 01:12:30,239 --> 01:12:32,560 iterar en un map también tenemos que aprender a hacerlo 1877 01:12:32,560 --> 01:12:36,079 no, porque son pares 1878 01:12:36,079 --> 01:12:39,039 se itera de una manera un pelín más complicada 1879 01:12:39,039 --> 01:12:40,880 que ya sí que vemos el próximo día 1880 01:12:40,880 --> 01:12:42,319 pero lo único que nos falta 1881 01:12:42,319 --> 01:12:44,079 es iterar por el map 1882 01:12:44,079 --> 01:12:46,960 por si necesitamos ver todos los pares 1883 01:12:46,960 --> 01:12:48,479 hasta encontrar el que nos guste 1884 01:12:48,479 --> 01:12:51,060 lo demás es ver los métodos que tiene pedidos 1885 01:12:51,060 --> 01:12:52,520 o sea, ver los métodos que tiene el map 1886 01:12:52,520 --> 01:12:55,199 que tiene cosas muy apañadas 1887 01:12:55,199 --> 01:12:56,140 efectivamente 1888 01:12:56,140 --> 01:12:58,659 ¿podría dar una write con lista clave? 1889 01:12:58,659 --> 01:13:01,739 claro, tiene un montón de métodos para hacer cosas 1890 01:13:01,739 --> 01:13:03,779 puedes limpiarlo 1891 01:13:03,779 --> 01:13:07,640 sacar el conjunto 1892 01:13:07,640 --> 01:13:08,739 con las claves 1893 01:13:08,739 --> 01:13:10,720 que nos va a venir muy bien para iterar 1894 01:13:10,720 --> 01:13:13,039 meter con el put 1895 01:13:13,039 --> 01:13:16,460 meter si no está 1896 01:13:16,460 --> 01:13:18,779 con esto te ahorras el que sobrescriba 1897 01:13:18,779 --> 01:13:20,399 vale 1898 01:13:20,399 --> 01:13:22,100 si pones este 1899 01:13:22,100 --> 01:13:25,140 eliminar, reemplazar 1900 01:13:25,140 --> 01:13:25,760 que es el 1901 01:13:25,760 --> 01:13:30,359 reemplazar este si no están 1902 01:13:30,359 --> 01:13:32,539 la diferencia con put es que put si no está te lo mete 1903 01:13:32,539 --> 01:13:34,140 reemplazar no te mete uno nuevo 1904 01:13:34,140 --> 01:13:36,500 y ya está, no tiene más 1905 01:13:36,500 --> 01:13:38,460 métodos que estos, o sea nos falta iterar 1906 01:13:38,460 --> 01:13:39,760 por el map y ya está 1907 01:13:39,760 --> 01:13:41,220 a ver, pues nada 1908 01:13:41,220 --> 01:13:43,279 a ver, bañado