1 00:00:00,180 --> 00:00:21,100 Vale, pues eso, como tengáis ya mucho río en la cabeza, dejo planteado este problema que hemos identificado, ¿verdad? Hemos identificado que el que ha hecho las pruebas del remove ha visto que tanto la posición 0 como la 1 las trata igual. En ambos casos borra la segunda de todas, ¿no? 2 00:00:21,100 --> 00:00:40,179 Es decir, me da igual que yo le dé la 0 3 00:00:40,179 --> 00:00:41,719 O que le dé la 1 4 00:00:41,719 --> 00:00:43,719 Cuando le doy la 1 está claro, me borra Dios 5 00:00:43,719 --> 00:00:45,560 Pero cuando le doy la 0 6 00:00:45,560 --> 00:00:47,659 También me borra la segunda 7 00:00:47,659 --> 00:00:49,920 Eso es lo que ha visto el de pruebas que funciona 8 00:00:49,920 --> 00:00:53,500 Está chiquito 9 00:00:53,500 --> 00:00:59,130 Error 10 00:00:59,130 --> 00:01:01,130 De funcionamiento 11 00:01:01,130 --> 00:01:03,109 Que hemos detectado 12 00:01:03,109 --> 00:01:09,260 Cuando le damos 13 00:01:09,260 --> 00:01:11,840 La posición 14 00:01:11,840 --> 00:01:15,760 0 15 00:01:15,760 --> 00:01:19,099 borra la 1 16 00:01:19,099 --> 00:01:20,620 en vez de la 0 17 00:01:20,620 --> 00:01:23,219 cuando le damos la 1, bien, borra la 1 18 00:01:23,219 --> 00:01:24,819 cuando le damos la 2, borra la 2 19 00:01:24,819 --> 00:01:27,200 para todas borra la correcta, pero cuando le damos la 0 20 00:01:27,200 --> 00:01:29,060 borra la 1 21 00:01:29,060 --> 00:01:33,180 a ver, tiene sentido también 22 00:01:33,180 --> 00:01:35,079 porque cuando le estamos dando la 0 23 00:01:35,079 --> 00:01:37,760 el bucle no se ejecuta nunca 24 00:01:37,760 --> 00:01:41,560 y lo que está haciendo es esta sentencia 25 00:01:41,560 --> 00:01:43,120 también, luego está haciendo lo mismo 26 00:01:43,120 --> 00:01:44,200 para la 0 que para la 1 27 00:01:44,200 --> 00:01:46,299 con lo cual efectivamente 28 00:01:46,299 --> 00:01:48,400 vale, pues lo que yo os planteo 29 00:01:48,400 --> 00:01:49,299 ahora es que 30 00:01:49,299 --> 00:01:50,739 lo arregléis 31 00:01:50,739 --> 00:01:54,260 hay una opción muy fácil que es tratar de forma especial 32 00:01:54,260 --> 00:01:54,900 el caso 0 33 00:01:54,900 --> 00:01:57,079 si posición es igual a 0 34 00:01:57,079 --> 00:01:59,719 pues cambiáis inicio 35 00:01:59,719 --> 00:02:02,159 inicio igual a inicio punto siguiente y ya está 36 00:02:02,159 --> 00:02:13,509 ¿verdad? bueno, ahí lo dejo planteo 37 00:02:13,509 --> 00:02:14,330 arreglar 38 00:02:14,330 --> 00:02:19,169 ala, pero vamos 39 00:02:19,169 --> 00:02:21,629 es distinguir el caso y hacer la sentencia que sea 40 00:02:21,629 --> 00:02:22,550 no tiene más 41 00:02:22,550 --> 00:02:25,229 vale, el proyecto lo subo ahora 42 00:02:25,229 --> 00:02:27,509 para que se te oiga como se ha quedado 43 00:02:27,509 --> 00:02:30,169 Vale 44 00:02:30,169 --> 00:02:40,810 Bueno, pues 45 00:02:40,810 --> 00:02:45,620 Vamos a descansar un poco 46 00:02:45,620 --> 00:02:50,080 Vamos a descansar un poco 47 00:02:50,080 --> 00:02:51,740 Oyendo cosas un poco más ligeras 48 00:02:51,740 --> 00:02:52,900 Más live 49 00:02:52,900 --> 00:02:54,259 ¿Vale? 50 00:03:00,550 --> 00:03:02,349 Vamos a descansar un poquito 51 00:03:02,349 --> 00:03:04,689 Ay 52 00:03:04,689 --> 00:03:14,300 Vale 53 00:03:14,300 --> 00:03:16,860 Bueno 54 00:03:16,860 --> 00:03:19,479 Ya lo revisas, retócalo 55 00:03:19,479 --> 00:03:22,020 Ahora que ya tienes el código más sencillo 56 00:03:22,020 --> 00:03:22,979 Yo creo que podrás encontrarlo 57 00:03:22,979 --> 00:03:24,879 Y si no, mañana lo dejamos arreglado 58 00:03:24,879 --> 00:03:30,180 Venga, a ver 59 00:03:30,180 --> 00:03:34,819 Bueno, pues estas dos clases 60 00:03:34,819 --> 00:03:35,580 Que hemos visto 61 00:03:35,580 --> 00:03:38,479 Son dos ejemplos estupendísimos 62 00:03:38,479 --> 00:03:40,500 De clases que me permiten 63 00:03:40,500 --> 00:03:41,400 A mí hacer aquí 64 00:03:41,400 --> 00:03:43,120 Mi cajita 65 00:03:43,120 --> 00:03:45,819 para meter un montón de cosas 66 00:03:45,819 --> 00:03:47,780 y añadir 67 00:03:47,780 --> 00:03:49,780 cada vez que quiera yo añado con el add 68 00:03:49,780 --> 00:03:52,000 y me olvido de como lo haga por dentro 69 00:03:52,000 --> 00:03:53,340 sé que eso se queda ahí metido 70 00:03:53,340 --> 00:03:56,139 y puedo eliminar con el remove 71 00:03:56,139 --> 00:03:57,520 me da igual como lo haga por dentro 72 00:03:57,520 --> 00:04:00,120 sé que eso desaparece de la colección 73 00:04:00,120 --> 00:04:01,819 y puedo recorrer 74 00:04:01,819 --> 00:04:03,219 y recuperar con un get 75 00:04:03,219 --> 00:04:05,879 bueno pues 76 00:04:05,879 --> 00:04:08,000 estas clases que hemos hecho ya están 77 00:04:08,000 --> 00:04:09,800 hechas con algunos 78 00:04:09,800 --> 00:04:12,060 más pulidas, con más métodos 79 00:04:12,060 --> 00:04:13,719 para poder hacer más cosas con ellas. 80 00:04:14,300 --> 00:04:15,580 Ya están más pulidas, ¿vale? 81 00:04:16,360 --> 00:04:17,560 Estas dos que hemos hecho. 82 00:04:18,120 --> 00:04:21,420 Y son las que se llaman ArrayList, 83 00:04:21,920 --> 00:04:24,939 que tiene un array por dentro y funciona 84 00:04:24,939 --> 00:04:29,180 como el ArrayList nuestro y LinkedList, 85 00:04:31,660 --> 00:04:34,180 que es una lista enlazada por dentro. 86 00:04:34,699 --> 00:04:37,980 Es un poquito más complicada que la lista enlazada nuestra 87 00:04:37,980 --> 00:04:39,439 porque es doblemente enlazada, 88 00:04:39,540 --> 00:04:41,779 lo que permite que los recorridos sean más rápidos. 89 00:04:41,779 --> 00:04:44,139 vale, tienen enlace 90 00:04:44,139 --> 00:04:45,639 la mano, se la doy a todos 91 00:04:45,639 --> 00:04:47,740 entonces puedo navegar para un lado, puedo navegar para otro 92 00:04:47,740 --> 00:04:48,939 entonces es un poquito más 93 00:04:48,939 --> 00:04:50,300 pero la idea es la misma 94 00:04:50,300 --> 00:04:52,420 vale, la idea es la misma 95 00:04:52,420 --> 00:04:54,660 vale, pues entonces 96 00:04:54,660 --> 00:04:57,420 no son las únicas clases que hay 97 00:04:57,420 --> 00:04:59,879 para meter datos, ya lo dijimos el otro día 98 00:04:59,879 --> 00:05:01,720 hay otras más 99 00:05:01,720 --> 00:05:03,100 y todas ellas 100 00:05:03,100 --> 00:05:04,339 forman 101 00:05:04,339 --> 00:05:07,519 lo que se llaman las colecciones 102 00:05:07,519 --> 00:05:11,470 vale 103 00:05:11,470 --> 00:05:13,009 entonces 104 00:05:13,009 --> 00:05:31,910 Entonces, esto no son un montón de clases así a mogollón, afortunadamente, no son un montón de clases a mogollón, porque el que diseña ya cosas para Java, pues el que hizo el paquete colecciones, pues ya las diseñó con una arquitectura de herencia e interfaces para facilitarnos su uso. 105 00:05:31,910 --> 00:05:50,189 No se puso a hacer clases sueltas, deslavazadas. No, hizo una jerarquía donde algunas se daban de otras, se podían reutilizar cosas. Eso me facilitaba a mí en un momento dado, pues cambiar de implementación porque ambas implementaba la misma interfaz. 106 00:05:50,189 --> 00:06:10,970 Es decir, las clases colecciones entre las cuales están estas dos y más como el Haset, el Triset, pues las que veremos, las clases colección no están hechas así cada una por libro. Están metidas dentro de una jerarquía que me va a facilitar ahora ya su uso y su manejo. 107 00:06:10,970 --> 00:06:14,029 Pues ¿cuál es la jerarquía de colecciones? 108 00:06:14,870 --> 00:06:18,930 Vamos a buscar un dibujito bono. 109 00:06:21,990 --> 00:06:23,189 Venga. 110 00:06:30,199 --> 00:06:31,560 ¿Qué hago yo? Estoy tonta. 111 00:06:35,899 --> 00:06:38,040 Venga, a ver. 112 00:06:40,290 --> 00:06:41,370 Vamos a poner. 113 00:06:44,220 --> 00:06:45,500 Jerarquía. 114 00:06:45,500 --> 00:06:50,259 Colecciones en Java 115 00:06:50,259 --> 00:06:51,500 Ya me lo ofrece 116 00:06:51,500 --> 00:06:54,850 Yo quiero un dibujito 117 00:06:54,850 --> 00:06:59,079 Para que las veamos 118 00:06:59,079 --> 00:07:00,279 Venga 119 00:07:00,279 --> 00:07:03,420 Este me gusta, este dibujito 120 00:07:03,420 --> 00:07:05,399 Pues no lo veo bien, confío en que 121 00:07:05,399 --> 00:07:06,480 Este sí, que esté bien 122 00:07:06,480 --> 00:07:08,620 Vale, vamos a confiar que esté bien 123 00:07:08,620 --> 00:07:19,550 Bueno, para que os hagáis una idea 124 00:07:19,550 --> 00:07:21,430 No es que la vayamos a destipar en detalle 125 00:07:21,430 --> 00:07:23,730 Para, pero para ilustrar 126 00:07:23,730 --> 00:07:25,310 Para que os hagáis una idea de que 127 00:07:25,310 --> 00:07:27,689 Todas las herramientas que están desarrolladas 128 00:07:27,689 --> 00:07:29,529 en Java están metidas 129 00:07:29,529 --> 00:07:31,389 en una arquitectura de herencia de interfaces 130 00:07:31,389 --> 00:07:33,310 porque eso es lo que las hace más operativas 131 00:07:33,310 --> 00:07:35,129 pues entre ellas mis colecciones 132 00:07:35,129 --> 00:07:37,110 vale, pues hay una 133 00:07:37,110 --> 00:07:39,129 interfaz por ahí arriba de todo 134 00:07:39,129 --> 00:07:41,110 ya sabemos lo que es una interfaz 135 00:07:41,110 --> 00:07:43,290 por ahí que es 136 00:07:43,290 --> 00:07:45,490 iterable, que no tiene todavía 137 00:07:45,490 --> 00:07:46,230 nada dentro 138 00:07:46,230 --> 00:07:49,629 y todas estas colecciones 139 00:07:49,629 --> 00:07:51,670 que están aquí debajo, que pena que esto no se pueda 140 00:07:51,670 --> 00:07:53,649 mover, todas ellas 141 00:07:53,649 --> 00:07:55,449 cuelgan 142 00:07:55,449 --> 00:07:57,110 de iterable 143 00:07:57,110 --> 00:07:58,250 cuelgan 144 00:07:58,250 --> 00:08:00,389 ¿eso qué significa? 145 00:08:00,910 --> 00:08:03,449 que sobre todas ellas vamos a poder iterar 146 00:08:03,449 --> 00:08:05,009 obligatoriamente todas 147 00:08:05,009 --> 00:08:07,170 tienen que permitir que 148 00:08:07,170 --> 00:08:08,290 iteremos por ellas 149 00:08:08,290 --> 00:08:11,430 iterable les da a todas 150 00:08:11,430 --> 00:08:13,550 las colecciones con las que vamos a trabajar 151 00:08:13,550 --> 00:08:15,149 les da a todas 152 00:08:15,149 --> 00:08:17,370 el rol de poder 153 00:08:17,370 --> 00:08:19,350 ser iteradas a través de 154 00:08:19,350 --> 00:08:21,629 un objeto iterador, como ya veremos 155 00:08:21,629 --> 00:08:23,230 porque uno puede recorrer 156 00:08:23,230 --> 00:08:25,509 una colección con un for, como hemos hecho nosotros 157 00:08:25,509 --> 00:08:27,230 con un for 158 00:08:27,230 --> 00:08:29,810 y luego cada elemento 159 00:08:29,810 --> 00:08:30,810 con el get sacarlo 160 00:08:30,810 --> 00:08:33,769 pero también se puede 161 00:08:33,769 --> 00:08:35,629 recorrer mediante un objeto un poco 162 00:08:35,629 --> 00:08:37,149 más complejo que es un iterador 163 00:08:37,149 --> 00:08:39,230 que me permite hacer cosas 164 00:08:39,230 --> 00:08:41,750 un poquito más chulas, a lo mejor 165 00:08:41,750 --> 00:08:44,009 o proteger ciertos recursos 166 00:08:44,009 --> 00:08:46,009 bueno, pues todas las colecciones 167 00:08:46,009 --> 00:08:47,429 que están hechas 168 00:08:47,429 --> 00:08:49,450 obligatoriamente 169 00:08:49,450 --> 00:08:51,649 implementan esta interfaz, con lo cual 170 00:08:51,649 --> 00:08:53,549 tienen ese rol, el de poder ser 171 00:08:53,549 --> 00:08:55,429 iteradas por un iterador, ya veremos cómo 172 00:08:55,429 --> 00:08:57,110 vale 173 00:08:57,110 --> 00:08:58,850 bueno, pues 174 00:08:58,850 --> 00:09:01,649 iterable es la superinterfaz que todavía 175 00:09:01,649 --> 00:09:03,690 no tiene nada, solamente tiene el rol de poder 176 00:09:03,690 --> 00:09:04,389 ser iterables 177 00:09:04,389 --> 00:09:07,690 pues de iterable, tenemos otra 178 00:09:07,690 --> 00:09:10,090 colección por debajo que la implementa 179 00:09:10,090 --> 00:09:11,529 otra interfaz 180 00:09:11,529 --> 00:09:13,389 perdón, que la implementa, vale 181 00:09:13,389 --> 00:09:15,350 que sigue siendo abstracta 182 00:09:15,350 --> 00:09:17,049 completamente, vale 183 00:09:17,049 --> 00:09:18,809 aquí cuando dice 184 00:09:18,809 --> 00:09:21,269 interface, no sé, podría 185 00:09:21,269 --> 00:09:23,049 ser clase abstracta también, vale 186 00:09:23,049 --> 00:09:25,110 es decir, algo que no puedo instanciar todavía 187 00:09:25,110 --> 00:09:27,029 bueno, pues collection 188 00:09:27,029 --> 00:09:29,889 es otra clase abstracta 189 00:09:29,889 --> 00:09:30,549 interfaz 190 00:09:30,549 --> 00:09:33,610 que es 191 00:09:33,610 --> 00:09:35,629 iterable y añade 192 00:09:35,629 --> 00:09:37,590 la posibilidad de meter cosas y borrar 193 00:09:37,590 --> 00:09:39,250 hace muy poco más añadir 194 00:09:39,250 --> 00:09:41,330 pues todas las colecciones 195 00:09:41,330 --> 00:09:42,250 todas 196 00:09:42,250 --> 00:09:45,370 en el ande collection, todas, con lo cual 197 00:09:45,370 --> 00:09:47,649 todas las que hagamos, ArrayList 198 00:09:47,649 --> 00:09:49,450 PriorityQueue, HashSet 199 00:09:49,450 --> 00:09:51,470 todas las que hay ahí en amarillito, ahí abajo 200 00:09:51,470 --> 00:09:53,110 todas ellas 201 00:09:53,110 --> 00:09:55,889 al heredar de colección, todas ellas 202 00:09:55,889 --> 00:09:58,029 tienen que implementar los métodos 203 00:09:58,029 --> 00:09:59,850 de colección, que los métodos de colección son 204 00:09:59,850 --> 00:10:00,470 nada 205 00:10:00,470 --> 00:10:03,629 vamos a ver cuáles son los métodos de colección 206 00:10:03,629 --> 00:10:07,519 son nada, vamos a 207 00:10:07,519 --> 00:10:09,460 poner aquí para verlo rápidamente 208 00:10:09,460 --> 00:10:15,139 ahora lo borro, colección 209 00:10:15,139 --> 00:10:15,759 vale 210 00:10:15,759 --> 00:10:25,190 vale, colección 211 00:10:25,190 --> 00:10:26,509 de java útil 212 00:10:26,509 --> 00:10:28,389 estamos en el paquete java útil, no olvidéis 213 00:10:28,389 --> 00:10:30,669 vale, pues una 214 00:10:30,669 --> 00:10:32,330 colección, ¿qué puede hacer? 215 00:10:32,330 --> 00:10:35,070 una colección, veis que poquita 216 00:10:35,070 --> 00:10:35,929 cosa puede hacer 217 00:10:35,929 --> 00:10:48,570 una colección me ofrece 218 00:10:48,570 --> 00:10:49,769 estos métodos de aquí 219 00:10:49,769 --> 00:10:52,490 recordad, esto no se 220 00:10:52,490 --> 00:10:54,549 implementa, esto es una clase 221 00:10:54,549 --> 00:10:56,450 abstracta, con métodos 222 00:10:56,450 --> 00:10:58,429 vacíos, pero el que herede de 223 00:10:58,429 --> 00:11:00,570 mí, tiene que implementar 224 00:11:00,570 --> 00:11:02,549 estos, añadir un objeto 225 00:11:02,549 --> 00:11:03,669 nuevo a la colección 226 00:11:03,669 --> 00:11:06,289 añadir un mogollón de objetos 227 00:11:06,289 --> 00:11:08,169 enteros 228 00:11:08,169 --> 00:11:09,970 que a su vez están metidos en la colección 229 00:11:09,970 --> 00:11:11,570 limpiarla enterita 230 00:11:11,570 --> 00:11:12,889 limpiarla entera 231 00:11:12,889 --> 00:11:15,350 ver si la colección contiene 232 00:11:15,350 --> 00:11:16,970 un objeto igualito 233 00:11:16,970 --> 00:11:18,690 a uno que yo le dé 234 00:11:18,690 --> 00:11:21,250 ver si una colección 235 00:11:21,250 --> 00:11:23,590 contiene todos los objetos 236 00:11:23,590 --> 00:11:25,850 igualitos a una colección 237 00:11:25,850 --> 00:11:26,970 que yo le pase por aquí 238 00:11:26,970 --> 00:11:28,750 ya está 239 00:11:28,750 --> 00:11:31,389 cualquier cosa que herede de colección 240 00:11:31,389 --> 00:11:33,509 tiene que implementar estos métodos 241 00:11:33,509 --> 00:11:34,330 que son poquitos 242 00:11:34,330 --> 00:11:36,629 borrar, bórrame 243 00:11:36,629 --> 00:11:39,429 un objeto de la colección 244 00:11:39,429 --> 00:11:41,049 que sea igual a este 245 00:11:41,049 --> 00:11:44,870 luego colección es una clase abstracta 246 00:11:44,870 --> 00:11:46,850 y todas las colecciones 247 00:11:46,850 --> 00:11:48,809 Hachette, Arraylis 248 00:11:48,809 --> 00:11:50,950 todas heredan de colección 249 00:11:50,950 --> 00:11:51,830 luego todas 250 00:11:51,830 --> 00:11:54,629 tienen que implementar estos métodos 251 00:11:54,629 --> 00:11:56,289 pero son nada, los básicos 252 00:11:56,289 --> 00:11:58,149 añadir, borrar 253 00:11:58,149 --> 00:12:00,429 un objeto que sea igual al que yo te doy 254 00:12:00,429 --> 00:12:02,669 como veis aquí no hay un 255 00:12:02,669 --> 00:12:03,529 borrar por posición 256 00:12:03,529 --> 00:12:06,470 porque no todas las colecciones tienen posición 257 00:12:06,470 --> 00:12:08,470 no todas, luego no tiene sentido 258 00:12:08,470 --> 00:12:10,210 que en colección yo borre por posición 259 00:12:10,210 --> 00:12:12,470 porque habrá colecciones que no tengan posición 260 00:12:12,470 --> 00:12:14,669 borro por igualdad 261 00:12:14,669 --> 00:12:16,710 doy un objeto, bórrame uno que sea igualito 262 00:12:16,710 --> 00:12:17,590 que este, igualito 263 00:12:17,590 --> 00:12:19,669 vale, pues ya está 264 00:12:19,669 --> 00:12:22,789 bueno, pues esta es colección, que ya empezamos a bajar 265 00:12:22,789 --> 00:12:23,590 en la jerarquía 266 00:12:23,590 --> 00:12:25,909 vale 267 00:12:25,909 --> 00:12:30,299 ahora 268 00:12:30,299 --> 00:12:33,059 las colecciones en general 269 00:12:33,059 --> 00:12:35,159 ya dijimos que hay de dos tipos 270 00:12:35,159 --> 00:12:37,559 listas 271 00:12:37,559 --> 00:12:39,220 y conjuntos 272 00:12:39,220 --> 00:12:41,360 list y set 273 00:12:41,360 --> 00:12:42,580 vale 274 00:12:42,580 --> 00:13:03,639 Y las colas, que en realidad son como una lista, pero esta la dejamos un poco para el final. Son como una lista que te ofrecen métodos específicos de las colas y las pilas de toda la vida. Pero bueno, este concepto lo dejamos ahora para el final. Por ahora nos olvidamos de la parte de Q, nos olvidamos. 275 00:13:03,639 --> 00:13:07,279 las colecciones en general 276 00:13:07,279 --> 00:13:09,519 o son listas 277 00:13:09,519 --> 00:13:11,919 o son conjuntos 278 00:13:11,919 --> 00:13:13,840 ¿cuál es la diferencia 279 00:13:13,840 --> 00:13:15,580 entre que sean listas y sean conjuntos? 280 00:13:16,379 --> 00:13:17,799 es lo que dijimos el otro día 281 00:13:17,799 --> 00:13:19,960 una lista 282 00:13:19,960 --> 00:13:21,940 en los elementos que están en ella 283 00:13:21,940 --> 00:13:23,480 tienen una posición asociada 284 00:13:23,480 --> 00:13:26,059 el que está en una lista está en una posición 285 00:13:26,059 --> 00:13:27,799 sea la 0, la 1, la 2 286 00:13:27,799 --> 00:13:30,000 en nuestras listas 287 00:13:30,000 --> 00:13:32,000 que hemos hecho eran listas 288 00:13:32,000 --> 00:13:33,100 porque tienen una posición asociada 289 00:13:33,100 --> 00:13:48,500 Y yo podía recuperar por posición, por eso hacía get posición, podía añadir al principio, al final, porque la posición cuenta. En un conjunto no hay posición asociada, lo que se añade, se añade, no hay ninguna posición. 290 00:13:48,500 --> 00:14:09,620 Vale, pues aquí de nuevo hay dos clases abstractas o interfaces que siguen sin implementar los métodos de collection, siguen sin implementarlas, pero añaden métodos específicos para lo que sea que queramos que sea lista y para lo que sea que queramos que sea set. 291 00:14:09,620 --> 00:14:25,820 Por ejemplo, list añade los métodos específicos de recuperar por posición. Ese método en colección no tiene sentido que esté porque en una colección en general no tienes por qué recuperar por posición porque puede que no haya posiciones. Pero en list ya sí, ya se añade ese. 292 00:14:25,820 --> 00:14:55,070 De hecho, si ahora en lugar de collection declaro esto como list, ahora este objeto mío lista tiene métodos que no tenía collection, que están relacionados con la posición. 293 00:14:55,070 --> 00:15:08,610 veis 294 00:15:08,610 --> 00:15:10,669 este tiene un método del tipo 295 00:15:10,669 --> 00:15:12,570 añádeme este objeto 296 00:15:12,570 --> 00:15:13,789 en esta posición 297 00:15:13,789 --> 00:15:16,830 vale, tiene una versión de add para añadir 298 00:15:16,830 --> 00:15:18,750 una posición concreta, que no la hemos hecho nosotros 299 00:15:18,750 --> 00:15:19,889 pero la podríamos haber hecho 300 00:15:19,889 --> 00:15:22,330 tiene añadir al principio 301 00:15:22,330 --> 00:15:24,470 porque aquí las posiciones sí cuentan 302 00:15:24,470 --> 00:15:26,129 tiene añadir al final 303 00:15:26,129 --> 00:15:29,049 tiene 304 00:15:29,049 --> 00:15:35,139 recuperar por posición 305 00:15:35,139 --> 00:15:37,539 que colección no tenía 306 00:15:37,539 --> 00:15:39,080 porque ahí no hay posición que valga 307 00:15:39,080 --> 00:15:41,360 tiene recuperar el primero 308 00:15:41,360 --> 00:15:43,039 recuperar el último 309 00:15:43,039 --> 00:15:44,799 tiene 310 00:15:44,799 --> 00:15:47,360 darme la posición en la que está 311 00:15:47,360 --> 00:15:48,779 un objeto igual a este 312 00:15:48,779 --> 00:15:51,519 tiene métodos relacionados con la posición 313 00:15:51,519 --> 00:15:53,320 luego list 314 00:15:53,320 --> 00:15:59,340 list 315 00:15:59,340 --> 00:16:01,940 es también una clase abstracta 316 00:16:01,940 --> 00:16:03,940 pero que me añade métodos 317 00:16:03,940 --> 00:16:06,259 relacionados con 318 00:16:06,259 --> 00:16:07,779 trabajar con posiciones 319 00:16:07,779 --> 00:16:10,259 y set sin embargo 320 00:16:10,259 --> 00:16:11,100 no me los añade 321 00:16:11,100 --> 00:16:12,360 ¿Vale? 322 00:16:13,320 --> 00:16:14,240 Ahora ya 323 00:16:14,240 --> 00:16:15,879 De list y de set 324 00:16:15,879 --> 00:16:17,039 Ahora ya 325 00:16:17,039 --> 00:16:19,860 Hay implementaciones concretas 326 00:16:19,860 --> 00:16:21,559 Que ya se pueden instanciar 327 00:16:21,559 --> 00:16:22,159 ¿Vale? 328 00:16:23,139 --> 00:16:23,940 Pues ArrayList 329 00:16:23,940 --> 00:16:25,460 Es una de ellas 330 00:16:25,460 --> 00:16:27,500 Y ArrayList es como nuestro 331 00:16:27,500 --> 00:16:28,139 MiArrayList 332 00:16:28,139 --> 00:16:29,740 Con todos los métodos 333 00:16:29,740 --> 00:16:30,659 Para poner 334 00:16:30,659 --> 00:16:31,679 Poner en una posición 335 00:16:31,679 --> 00:16:32,840 Recuperar por posición 336 00:16:32,840 --> 00:16:33,379 Y ya está 337 00:16:33,379 --> 00:16:35,139 Y LinkedInList 338 00:16:35,139 --> 00:16:36,500 Es otra implementación 339 00:16:36,500 --> 00:16:40,129 Como las que hemos hecho nosotros 340 00:16:40,129 --> 00:16:41,269 Pues parecidas 341 00:16:41,269 --> 00:16:43,509 dos implementaciones distintas 342 00:16:43,509 --> 00:16:44,830 que ya sí que se pueden instanciar 343 00:16:44,830 --> 00:16:45,669 la interfaz list 344 00:16:45,669 --> 00:16:46,529 que a su vez era de 345 00:16:46,529 --> 00:16:47,370 collective 346 00:16:47,370 --> 00:16:48,309 que a su vez de iterable 347 00:16:48,309 --> 00:16:49,070 vale 348 00:16:49,070 --> 00:16:51,330 y set 349 00:16:51,330 --> 00:16:53,789 pues tiene 350 00:16:53,789 --> 00:16:57,889 tres implementaciones básicas 351 00:16:57,889 --> 00:17:00,029 estas dos 352 00:17:00,029 --> 00:17:02,830 esto debería ser una h 353 00:17:02,830 --> 00:17:04,089 donde pone una t es una h 354 00:17:04,089 --> 00:17:05,690 vale 355 00:17:05,690 --> 00:17:06,670 estas dos 356 00:17:06,670 --> 00:17:08,869 que ya veremos en qué se diferencian 357 00:17:08,869 --> 00:17:10,109 y cómo están hechas por dentro 358 00:17:10,109 --> 00:17:12,150 dos implementaciones de set 359 00:17:12,150 --> 00:17:29,170 Y luego hay una interfaz de set que añade métodos relacionados con conjuntos que admitan orden. Admitir orden no significa que se caractericen por posición, es otra cosa distinta. Conjuntos que admiten un criterio de orden entre sí. 360 00:17:29,170 --> 00:17:32,150 son un conjunto de 361 00:17:32,150 --> 00:17:36,289 o sea, un tipo de conjunto especial 362 00:17:36,289 --> 00:17:38,750 es el conjunto en el que admite orden. 363 00:17:39,470 --> 00:17:40,569 Pues esta interfaz 364 00:17:40,569 --> 00:17:43,089 incorpora métodos relacionados con el orden 365 00:17:43,089 --> 00:17:46,130 y esta interfaz tiene su propia implementación 366 00:17:46,130 --> 00:17:48,190 que es el tríceps. 367 00:17:49,410 --> 00:17:49,990 ¿Vale? 368 00:17:50,789 --> 00:17:53,970 Luego, las tres implementaciones de conjunto 369 00:17:53,970 --> 00:17:56,069 hashed, linked hashed y tríceps. 370 00:17:56,509 --> 00:17:58,089 Las dos de listas 371 00:17:58,089 --> 00:18:00,869 ArrayList, que falta una R, y LinkedList 372 00:18:00,869 --> 00:18:05,210 y está él en minúscula 373 00:18:05,210 --> 00:18:06,730 y Sorter 374 00:18:06,730 --> 00:18:08,910 no es una R ahí, es una D 375 00:18:08,910 --> 00:18:11,009 vamos, el que ha hecho este dibujito 376 00:18:11,009 --> 00:18:11,869 se ha lucido, ¿no? 377 00:18:12,869 --> 00:18:14,829 Ratas, ha metido un montón 378 00:18:14,829 --> 00:18:16,269 ¿Eso de qué? 379 00:18:16,369 --> 00:18:18,190 Es de la generación Z, seguro 380 00:18:18,190 --> 00:18:18,910 ¿A raíz de qué? 381 00:18:22,329 --> 00:18:23,309 Vale, entonces 382 00:18:23,309 --> 00:18:25,450 Vector y Stack 383 00:18:25,450 --> 00:18:27,450 eran las primeras colecciones 384 00:18:27,450 --> 00:18:29,470 que había ya en el pasado, hace siglos 385 00:18:29,470 --> 00:18:32,670 todavía se conservan un poquito como código 386 00:18:32,670 --> 00:18:34,069 legado que se llama, que es 387 00:18:34,069 --> 00:18:36,650 hay código que se ha sustituido, clases 388 00:18:36,650 --> 00:18:38,630 cosas que se han sustituido por código nuevo 389 00:18:38,630 --> 00:18:40,390 pero dejamos las viejas 390 00:18:40,390 --> 00:18:42,289 por si hay proyectos 391 00:18:42,289 --> 00:18:43,930 que usan esas clases antiguas 392 00:18:43,930 --> 00:18:45,490 no craquen de golpe 393 00:18:45,490 --> 00:18:47,910 pues Vector y Stack son 394 00:18:47,910 --> 00:18:50,250 las dos primeras implementaciones de colecciones 395 00:18:50,250 --> 00:18:52,029 que había muy viejunas 396 00:18:52,029 --> 00:18:54,410 pero ahí siguen y uno las puede seguir utilizando 397 00:18:54,410 --> 00:18:56,609 y ArrayDQ 398 00:18:56,609 --> 00:18:58,509 y PriorityQ 399 00:18:58,509 --> 00:19:01,589 son dos implementaciones 400 00:19:01,589 --> 00:19:03,089 que son listas enlazadas también. 401 00:19:03,269 --> 00:19:04,390 Son listas enlazadas, en realidad. 402 00:19:05,130 --> 00:19:07,549 Pero admiten métodos específicos 403 00:19:07,549 --> 00:19:08,630 relacionados con colas. 404 00:19:09,509 --> 00:19:11,210 Pero eso es lo que he dicho, que ese concepto 405 00:19:11,210 --> 00:19:12,390 lo dejamos un poquito para el final. 406 00:19:12,970 --> 00:19:14,930 Ahora vamos a centrarnos en las listas 407 00:19:14,930 --> 00:19:16,990 y los conjuntos. En particular, 408 00:19:17,130 --> 00:19:19,309 ArrayList, LinkedList, y Hashet, 409 00:19:19,369 --> 00:19:20,470 LinkedHashet y Triset. 410 00:19:21,009 --> 00:19:22,170 Se nos faltan muy bien esos tres. 411 00:19:23,009 --> 00:19:25,150 Hashet, Linset... 412 00:19:25,150 --> 00:19:27,549 Sí. Bueno, y ver un poquito más de cómo se usan 413 00:19:27,549 --> 00:19:29,650 las listas, porque hemos hecho nuestra propia lista para entender 414 00:19:29,650 --> 00:19:31,589 cómo se usa, para entender cómo está 415 00:19:31,589 --> 00:19:33,170 hecha por dentro. Pero bueno, 416 00:19:33,690 --> 00:19:35,210 los detalles de uso de 417 00:19:35,210 --> 00:19:37,130 esto no es trivial tampoco. 418 00:19:38,150 --> 00:19:39,509 Y luego esto en particular tenemos 419 00:19:39,509 --> 00:19:41,730 que ver un poquito, pues, cómo está hecho por dentro 420 00:19:41,730 --> 00:19:42,990 sin programarlo nosotros. 421 00:19:43,809 --> 00:19:45,730 Y también los detalles de uso tampoco son triviales. 422 00:19:46,650 --> 00:19:46,829 ¿Vale? 423 00:19:48,529 --> 00:19:49,549 Vale, venga, pues, 424 00:19:49,650 --> 00:19:50,450 si queréis nos vamos. 425 00:19:54,089 --> 00:19:55,210 Solo si queréis.