1 00:00:01,970 --> 00:00:11,449 Que un problema que necesitamos resolver para hacer nuestras aplicaciones es el de poder almacenar un montón de datos, muchísimos. 2 00:00:13,250 --> 00:00:17,289 Para eso tenemos variables, pero muchísimas variables no son la solución. 3 00:00:17,489 --> 00:00:20,829 Porque un montón de variables, así sueltas y declaradas, no es la solución. 4 00:00:21,750 --> 00:00:25,289 Tenemos el array, estructura de cualquier lenguaje de pronunciación. 5 00:00:25,809 --> 00:00:29,690 Por si no puede usar el array, pero es incómodo. 6 00:00:29,690 --> 00:00:36,310 Es incómodo para insertar y recuperar porque no es dinámico, porque es estático, porque el tamaño está fijo. 7 00:00:37,210 --> 00:00:44,810 Entonces, se idean soluciones para guardar un montón de datos bajo una misma referencia, 8 00:00:45,810 --> 00:00:48,689 de tal manera que yo no tenga que declarar muchas variables, declaro una, 9 00:00:48,689 --> 00:00:55,170 la de la colección de datos, declaro una y solamente bajo una referencia tengo un montón de datos 10 00:00:55,170 --> 00:01:01,649 que puedo recorrer, puedo insertar datos nuevos, puedo recuperar, entonces se idean soluciones, ¿verdad? 11 00:01:01,729 --> 00:01:11,109 Y entonces vimos una solución ideada que es la lista enlazada y la programamos y vimos cómo usarla, ¿vale? 12 00:01:11,549 --> 00:01:16,170 Bueno, pues entonces efectivamente todo esto está hecho, de alguna manera todo esto está hecho 13 00:01:16,170 --> 00:01:18,549 y hay un montón de clases para resolver este problema. 14 00:01:18,549 --> 00:01:21,010 algunas de ellas son idénticas 15 00:01:21,010 --> 00:01:23,510 a las dos que esbozamos ayer 16 00:01:23,510 --> 00:01:25,769 la lista enlazada y el array list 17 00:01:25,769 --> 00:01:27,349 ese de ahí, que era un array 18 00:01:27,349 --> 00:01:29,750 que yo le hacía métodos 19 00:01:29,750 --> 00:01:31,849 para hacerlo grande y pequeño 20 00:01:31,849 --> 00:01:32,730 según me interesaba 21 00:01:32,730 --> 00:01:35,989 pero aparte de esas dos hay muchas más clases hechas 22 00:01:35,989 --> 00:01:37,709 porque 23 00:01:37,709 --> 00:01:39,989 en el lenguaje de programación Java 24 00:01:39,989 --> 00:01:42,010 y en cualquier otro 25 00:01:42,010 --> 00:01:44,150 lo que se ha ideado es, venga pues vamos a hacer clases 26 00:01:44,150 --> 00:01:45,829 para solucionar este problema 27 00:01:45,829 --> 00:01:47,549 de muchas formas distintas, de muchas 28 00:01:47,549 --> 00:01:50,170 de más formas de las que planteamos ayer 29 00:01:50,170 --> 00:01:52,069 de muchas más, entonces hay un montón 30 00:01:52,069 --> 00:01:53,950 de clases que ya están hechas para resolver 31 00:01:53,950 --> 00:01:55,950 este problema, el de guardar 32 00:01:55,950 --> 00:01:57,090 un montón de datos 33 00:01:57,090 --> 00:01:59,870 bajo la misma referencia, bajo un mismo 34 00:01:59,870 --> 00:02:02,030 nombre de variable, hay un montón de clases 35 00:02:02,030 --> 00:02:03,989 bueno, pues los que se pusieron 36 00:02:03,989 --> 00:02:05,709 a hacer estas clases 37 00:02:05,709 --> 00:02:07,109 los que se pusieron a hacerlas 38 00:02:07,109 --> 00:02:09,490 dijeron, venga, vamos a organizarlo 39 00:02:09,490 --> 00:02:11,909 ¿cómo organizamos este maremagnum de clases? 40 00:02:12,569 --> 00:02:13,789 que valen todas para lo mismo 41 00:02:13,789 --> 00:02:15,949 está claro, para guardar muchos datos juntos 42 00:02:15,949 --> 00:02:30,949 Pero cada una lo hace de una manera distinta. ¿Cómo las organizamos? Bueno, pues efectivamente se han organizado haciendo una jerarquía, una jerarquía de interfaces y clases abstractas de las cuales una se le da en directo. 43 00:02:30,949 --> 00:02:34,050 entonces 44 00:02:34,050 --> 00:02:36,629 las interfaces, las clases 45 00:02:36,629 --> 00:02:38,949 las clases abstractas, la herencia de clases 46 00:02:38,949 --> 00:02:40,310 la implementación de interfaces 47 00:02:40,310 --> 00:02:43,030 eso que ya entendemos y ya vemos lo que es 48 00:02:43,030 --> 00:02:45,189 es la herramienta para diseñar 49 00:02:45,189 --> 00:02:47,490 cualquier conjunto de clases que haga cosas 50 00:02:47,490 --> 00:02:49,090 es la herramienta que se hace 51 00:02:49,090 --> 00:02:50,509 tú te haces una interfaz 52 00:02:50,509 --> 00:02:51,949 haces varias implementaciones 53 00:02:51,949 --> 00:02:53,990 a su vez de una de ellas heredas 54 00:02:53,990 --> 00:02:57,389 para particularizarla y hacer otra que sea un poquito distinta 55 00:02:57,389 --> 00:02:59,349 esa es la forma de diseñar 56 00:02:59,349 --> 00:03:00,629 con una especie de jerarquía 57 00:03:00,629 --> 00:03:07,069 de manera que todo lo que se comparta esté junto, pero luego haya diferentes particularidades, etc. 58 00:03:07,669 --> 00:03:11,770 Bueno, pues así se han organizado las clases relacionadas con el almacenamiento de datos. 59 00:03:12,129 --> 00:03:13,610 Así se han organizado, tenía una jerarquía. 60 00:03:14,449 --> 00:03:18,849 Bueno, vamos a ver un poco estas clases, entonces, cómo son, las que ya están hechas, repito, 61 00:03:18,849 --> 00:03:23,449 y las que nosotros lo que vamos a hacer es aprender a utilizarlas bien, aprender a utilizarlas bien. 62 00:03:24,189 --> 00:03:29,669 Pues vamos a ver estas clases que ya están hechas, cómo están organizadas y cómo usarlas, claro. 63 00:03:30,629 --> 00:03:54,340 Vale, pues el que pensó todo este meollo de las clases para guardar datos, el que pensó todo este rollo, lo primero que pensó es el darle un nombre, darle un nombre general a todas las clases que se ocupan de eso, 64 00:03:54,340 --> 00:03:56,360 de guardar un montón de datos 65 00:03:56,360 --> 00:03:57,620 bajo la misma referencia 66 00:03:57,620 --> 00:04:00,139 bueno pues el nombre que he decidido darle 67 00:04:00,139 --> 00:04:04,479 es el nombre de 68 00:04:04,479 --> 00:04:05,800 me he pasado de tamaño 69 00:04:05,800 --> 00:04:08,520 es el nombre 70 00:04:08,520 --> 00:04:09,919 de colecciones 71 00:04:09,919 --> 00:04:12,240 por esto este tema que estamos viendo 72 00:04:12,240 --> 00:04:13,479 se llama el tema de colecciones 73 00:04:13,479 --> 00:04:16,399 entonces las clases 74 00:04:16,399 --> 00:04:18,000 que sirven para guardar datos 75 00:04:18,000 --> 00:04:20,180 bajo una misma referencia son las colecciones 76 00:04:20,180 --> 00:04:24,500 bueno pues entonces a la hora de organizarlas 77 00:04:24,500 --> 00:04:26,040 se dijo ah vale fenomenal 78 00:04:26,040 --> 00:04:27,300 Pues vamos a hacer una interfaz 79 00:04:27,300 --> 00:04:29,519 Una interfaz que se llame 80 00:04:29,519 --> 00:04:32,040 Collection, vamos a hacer una interfaz 81 00:04:32,040 --> 00:04:34,379 Y esta interfaz 82 00:04:34,379 --> 00:04:35,120 Que me diga 83 00:04:35,120 --> 00:04:38,220 Los métodos que tiene que satisfacer 84 00:04:38,220 --> 00:04:40,480 Cualquier cosa que quiera ser una colección 85 00:04:40,480 --> 00:04:42,120 Esa es la base 86 00:04:42,120 --> 00:04:44,279 De una, cuando se usan interfaces para diseñar 87 00:04:44,279 --> 00:04:46,000 Se hace así, dices, oye yo quiero hacer 88 00:04:46,000 --> 00:04:47,379 Varias cosas 89 00:04:47,379 --> 00:04:50,259 Que ejecuten 90 00:04:50,259 --> 00:04:51,959 Un comportamiento, aunque cada una 91 00:04:51,959 --> 00:04:53,100 Lo haga de una manera distinta 92 00:04:53,100 --> 00:04:57,000 Yo quiero un montón de animalitos 93 00:04:57,000 --> 00:04:58,980 Un perro, un gato, un ratón 94 00:04:58,980 --> 00:05:00,480 Cada uno de ellos hace sus cosas 95 00:05:00,480 --> 00:05:02,939 Pero todos ellos quiero que coman 96 00:05:02,939 --> 00:05:04,100 Cada uno a su manera 97 00:05:04,100 --> 00:05:07,920 Pues la forma de diseñar eso ya sabemos que sería 98 00:05:07,920 --> 00:05:10,680 Me hago una interfaz única 99 00:05:10,680 --> 00:05:13,259 Con el método comer vacío 100 00:05:13,259 --> 00:05:15,660 Y luego ya cada animalito 101 00:05:15,660 --> 00:05:17,699 Implementa esa interfaz 102 00:05:17,699 --> 00:05:19,500 Y cada uno decide 103 00:05:19,500 --> 00:05:21,120 Cómo implementa el método comer 104 00:05:21,120 --> 00:05:21,899 Cada uno lo decide 105 00:05:21,899 --> 00:05:49,019 Es la manera de diseñar, ¿no? Pues aquí igual, el que pensó todo esto de las clases, colecciones, dijo, vamos a hacernos una interfaz colección, con los métodos básicos que yo quiero que haga cualquier clase que sea una colección, que serán insertar, eliminar, los que se decidan, y ahora ya me hago todas las clases que yo quiera y que cada una, ese método insertar lo haga a su manera, cada una como quiera, ¿vale? 106 00:05:49,019 --> 00:05:51,220 nosotros ya hemos visto dos de hecho distintas 107 00:05:51,220 --> 00:05:52,920 el ArrayList y la lista enlazada 108 00:05:52,920 --> 00:05:54,860 que las hemos hecho nosotros por libre 109 00:05:54,860 --> 00:05:57,120 pero serían 110 00:05:57,120 --> 00:05:58,740 dos implementaciones de lo mismo 111 00:05:58,740 --> 00:05:59,939 de meter datos en un sitio 112 00:05:59,939 --> 00:06:03,399 bueno, pues entonces tenemos una interfaz 113 00:06:03,399 --> 00:06:04,740 Collection, una interfaz 114 00:06:04,740 --> 00:06:07,019 que tiene unos métodos vacíos 115 00:06:07,019 --> 00:06:08,399 y ahora ya 116 00:06:08,399 --> 00:06:11,120 se pueden hacer implementaciones 117 00:06:11,120 --> 00:06:12,079 de esa interfaz 118 00:06:12,079 --> 00:06:15,079 y cada clase que implemente esa interfaz 119 00:06:15,079 --> 00:06:16,720 decide como hace 120 00:06:16,720 --> 00:06:19,199 Lo de insertar, borrar, etc 121 00:06:19,199 --> 00:06:22,300 Entonces esta interfaz colección 122 00:06:22,300 --> 00:06:25,009 A ver 123 00:06:25,009 --> 00:06:27,430 Vamos a abrir el 124 00:06:27,430 --> 00:06:30,449 Eclipse 125 00:06:30,449 --> 00:06:54,290 Vale, me voy a hacer aquí un proyecto 126 00:06:54,290 --> 00:06:55,970 Jerarquía colecciones 127 00:06:55,970 --> 00:06:57,649 Para estas cositas 128 00:06:57,649 --> 00:06:59,269 Que vamos a explicar 129 00:06:59,269 --> 00:07:11,579 Jerarquía de colecciones 130 00:07:11,579 --> 00:07:12,420 Pues venga 131 00:07:12,420 --> 00:07:20,199 Venga, voy a hacer un paquete cualquiera 132 00:07:20,199 --> 00:07:22,220 Un paquete cualquiera 133 00:07:22,220 --> 00:07:24,740 Con un main 134 00:07:24,740 --> 00:07:25,139 Vale 135 00:07:25,139 --> 00:07:33,439 una clase main cualquiera 136 00:07:33,439 --> 00:07:35,480 para poder hacer código 137 00:07:35,480 --> 00:07:38,740 bueno pues entonces 138 00:07:38,740 --> 00:07:41,120 dentro de las clases 139 00:07:41,120 --> 00:07:43,899 de la máquina que nos ofrece 140 00:07:43,899 --> 00:07:44,720 la JDK 141 00:07:44,720 --> 00:07:47,620 esas que hemos abierto a veces aquí a la izquierda 142 00:07:47,620 --> 00:07:49,360 esto que está aquí en la JRE 143 00:07:49,360 --> 00:07:51,600 esto que hemos visto que nos da un montón 144 00:07:51,600 --> 00:07:53,639 de clases ya hechas de las cuales algunas 145 00:07:53,639 --> 00:07:55,860 ya hemos usado como string, scanner, etc 146 00:07:55,860 --> 00:07:57,939 pues dentro de todas ellas 147 00:07:57,939 --> 00:07:59,579 están las clases 148 00:07:59,579 --> 00:08:00,720 que son las colecciones 149 00:08:00,720 --> 00:08:03,259 ¿Y dónde están? En Java útil 150 00:08:03,259 --> 00:08:05,259 ¿Vale? Están en Java útil 151 00:08:05,259 --> 00:08:07,699 Bueno, pues en Java útil 152 00:08:07,699 --> 00:08:10,199 Está esa interfaz de la que venimos hablando 153 00:08:10,199 --> 00:08:10,800 Que es esta 154 00:08:10,800 --> 00:08:13,800 Entonces 155 00:08:13,800 --> 00:08:16,480 Cualquier clase que sea colección 156 00:08:16,480 --> 00:08:18,399 Implementa esta interfaz 157 00:08:18,399 --> 00:08:20,199 De aquí, implementa esa 158 00:08:20,199 --> 00:08:30,399 ¿Veis? Colección está en Java útil 159 00:08:30,399 --> 00:08:32,039 Que es el paquete donde están 160 00:08:32,039 --> 00:08:34,019 Todas las clases relacionadas 161 00:08:34,019 --> 00:08:34,820 Con colecciones 162 00:08:34,820 --> 00:08:38,639 Las estándares 163 00:08:38,639 --> 00:08:39,559 Las estándares de Java 164 00:08:39,559 --> 00:08:40,919 Luego hay colecciones específicas 165 00:08:40,919 --> 00:08:41,960 Para usos concretos 166 00:08:41,960 --> 00:08:43,379 Las estándares de Java están ahí 167 00:08:43,379 --> 00:08:44,759 Vale, entonces 168 00:08:44,759 --> 00:08:49,519 Collection no es una clase concreta 169 00:08:49,519 --> 00:08:51,840 Collection, si entramos dentro 170 00:08:51,840 --> 00:08:53,379 En la implementación 171 00:08:53,379 --> 00:08:54,460 Vamos a ver cómo está hecha 172 00:08:54,460 --> 00:08:55,279 Collection 173 00:08:55,279 --> 00:08:59,759 Collection que está aquí 174 00:08:59,759 --> 00:09:00,879 ¿Veis? 175 00:09:01,379 --> 00:09:02,580 Collection es una interfaz 176 00:09:02,580 --> 00:09:05,460 Esto es Collection, una interfaz 177 00:09:05,460 --> 00:09:10,440 y encima genérica, ya sabemos lo que es ser genérico 178 00:09:10,440 --> 00:09:14,759 y es que depende de un tipo de dato, entonces cualquier clase 179 00:09:14,759 --> 00:09:18,519 que implemente esta interfaz, cualquier clase que implemente esta interfaz 180 00:09:18,519 --> 00:09:21,559 tendrá que dar contenido a los métodos que tiene 181 00:09:21,559 --> 00:09:26,980 y los métodos que tiene, los veremos por encima, son los métodos relacionados con hacer lo que se hace con las colecciones 182 00:09:26,980 --> 00:09:29,919 meter un dato nuevo, sacar un dato nuevo 183 00:09:29,919 --> 00:09:34,059 entonces esta interfaz colección te dice, oye, tu clase quieres ser colección 184 00:09:34,059 --> 00:09:36,139 quieres implementarme, pues di 185 00:09:36,139 --> 00:09:38,279 cómo vas a hacer la inserción, di cómo vas a hacer 186 00:09:38,279 --> 00:09:40,120 el borrado y ya está 187 00:09:40,120 --> 00:09:42,139 y luego clases 188 00:09:42,139 --> 00:09:44,000 implementaciones de colección 189 00:09:44,000 --> 00:09:46,320 puede haber tropecientas, cada una 190 00:09:46,320 --> 00:09:48,299 hará la inserción de una manera, el borrado 191 00:09:48,299 --> 00:09:48,879 de una manera 192 00:09:48,879 --> 00:09:50,700 ayer 193 00:09:50,700 --> 00:09:53,779 repito, vimos dos de ejemplo 194 00:09:53,779 --> 00:09:56,299 pues una lista enlazada hace la inserción 195 00:09:56,299 --> 00:09:58,059 de una manera, una railis 196 00:09:58,059 --> 00:10:00,440 lo hace de otra manera, pues todas ellas 197 00:10:00,440 --> 00:10:02,460 son implementaciones de esta 198 00:10:02,460 --> 00:10:04,220 entonces esta es una interfaz 199 00:10:04,220 --> 00:10:06,600 que tiene unos métodos vacíos 200 00:10:06,600 --> 00:10:08,100 y cualquiera que lo implemente 201 00:10:08,100 --> 00:10:09,019 los tiene que 202 00:10:09,019 --> 00:10:12,019 que dar cuerpo, por ejemplo 203 00:10:12,019 --> 00:10:14,659 tiene el método size, que tú quieres ser colección 204 00:10:14,659 --> 00:10:16,480 muy bien, pues tienes que implementar 205 00:10:16,480 --> 00:10:18,539 un método para devolver cuántos elementos 206 00:10:18,539 --> 00:10:19,720 tienes dentro, vale 207 00:10:19,720 --> 00:10:22,480 pues cada colección lo implementará como sea 208 00:10:22,480 --> 00:10:24,059 y así unos métodos básicos 209 00:10:24,059 --> 00:10:26,399 que quieres ser colección, pues tienes que implementar un método 210 00:10:26,399 --> 00:10:27,720 para devolver true o false 211 00:10:27,720 --> 00:10:30,259 en función de si estás vacía o no estás vacía 212 00:10:30,259 --> 00:10:32,299 y poquitos métodos tiene 213 00:10:32,299 --> 00:10:33,419 que quiere ser colección 214 00:10:33,419 --> 00:10:35,919 vale, pues tienes que tener un método 215 00:10:35,919 --> 00:10:38,120 tienes que implementar un método contains 216 00:10:38,120 --> 00:10:40,059 al que si se 217 00:10:40,059 --> 00:10:41,659 pasa un objeto 218 00:10:41,659 --> 00:10:44,080 tienes que decir true o false 219 00:10:44,080 --> 00:10:45,740 en función de si ese objeto 220 00:10:45,740 --> 00:10:48,320 está en tu colección, está dentro o no 221 00:10:48,320 --> 00:10:50,100 eso es lo que 222 00:10:50,100 --> 00:10:52,000 nos dice la interfaz colección, nos obliga 223 00:10:52,000 --> 00:10:52,879 a implementar esto 224 00:10:52,879 --> 00:10:55,720 el iterador, eso ya lo veremos 225 00:10:55,720 --> 00:10:57,679 pues es devolver un elemento 226 00:10:57,679 --> 00:10:59,620 para poder recorrerlo de forma sencilla 227 00:10:59,620 --> 00:11:00,879 bueno 228 00:11:00,879 --> 00:11:03,220 esto para convertirlo en un array 229 00:11:03,220 --> 00:11:08,360 sobre todo 230 00:11:08,360 --> 00:11:10,879 lo que más nos interesa 231 00:11:10,879 --> 00:11:11,419 es este 232 00:11:11,419 --> 00:11:13,600 tú quieres ser colección 233 00:11:13,600 --> 00:11:16,360 pues tienes que implementar un método 234 00:11:16,360 --> 00:11:19,100 que permita insertar un elemento 235 00:11:19,100 --> 00:11:20,740 del tipo genérico 236 00:11:20,740 --> 00:11:21,919 que sea en la colección 237 00:11:21,919 --> 00:11:23,919 si quieres ser colección tienes que decir 238 00:11:23,919 --> 00:11:25,000 cómo vas a hacer el app 239 00:11:25,000 --> 00:11:27,980 colección es una interfaz vacía 240 00:11:27,980 --> 00:11:30,200 lo único que dice es tú quieres implementar colección 241 00:11:30,200 --> 00:11:32,000 pues dime cómo vas a hacer todo eso 242 00:11:32,000 --> 00:11:34,120 vale 243 00:11:34,120 --> 00:11:37,679 y así poquitos métodos 244 00:11:37,679 --> 00:11:38,500 no tiene mucho más 245 00:11:38,500 --> 00:11:41,379 remove, que quiere ser colección, vale 246 00:11:41,379 --> 00:11:43,500 pues di como vas a implementar 247 00:11:43,500 --> 00:11:45,379 si yo te paso un objeto, eliminarlo 248 00:11:45,379 --> 00:11:47,019 si está en tu 249 00:11:47,019 --> 00:11:49,399 dentro de tu colección 250 00:11:49,399 --> 00:11:53,779 lo mismo, este para añadir 251 00:11:53,779 --> 00:11:55,279 un montón de golpe 252 00:11:55,279 --> 00:11:57,779 le pasas 253 00:11:57,779 --> 00:11:59,539 a su vez otra colección 254 00:11:59,539 --> 00:12:00,620 de datos, otra 255 00:12:00,620 --> 00:12:03,200 y te los añade todos de golpe 256 00:12:03,200 --> 00:12:05,580 bueno, pues esto tiene el método 257 00:12:05,580 --> 00:12:07,919 la interfaz 258 00:12:07,919 --> 00:12:10,039 collection, ¿vale? Tiene una serie de métodos 259 00:12:10,039 --> 00:12:10,620 vacíos 260 00:12:10,620 --> 00:12:13,100 una serie de métodos vacíos 261 00:12:13,100 --> 00:12:15,299 y el que quiera implementar 262 00:12:15,299 --> 00:12:17,899 las clases que quieran implementar collection 263 00:12:17,899 --> 00:12:19,659 pues tienen que dar cuerpo 264 00:12:19,659 --> 00:12:21,539 a esos métodos 265 00:12:21,539 --> 00:12:23,940 entonces una forma 266 00:12:23,940 --> 00:12:25,539 de unificar, para eso van las interfaces 267 00:12:25,539 --> 00:12:26,679 para unificar el diseño 268 00:12:26,679 --> 00:12:29,940 entonces aquí, esta colección 269 00:12:29,940 --> 00:12:31,879 C, si yo aquí quiero poner 270 00:12:31,879 --> 00:12:34,139 en esta colección tengo un montón de clientes 271 00:12:34,139 --> 00:12:35,940 de los cuales pues quiero 272 00:12:35,940 --> 00:12:36,539 poner 273 00:12:36,539 --> 00:12:39,899 quiero pues eso 274 00:12:39,899 --> 00:12:41,960 quiero meter en la colección un montón de clientes 275 00:12:41,960 --> 00:12:44,159 no puedo 276 00:12:44,159 --> 00:12:45,860 crear una colección directamente 277 00:12:45,860 --> 00:12:46,539 obviamente 278 00:12:46,539 --> 00:12:49,990 no puedo hacer esto 279 00:12:49,990 --> 00:12:53,009 porque collection es 280 00:12:53,009 --> 00:12:54,830 una interfaz 281 00:12:54,830 --> 00:12:57,029 y de una interfaz no se instancian objetos 282 00:12:57,029 --> 00:12:59,370 ni de una clase abstracta 283 00:12:59,370 --> 00:13:00,970 se instancian objetos de clases 284 00:13:00,970 --> 00:13:03,970 pero lo que se instanciaré es 285 00:13:03,970 --> 00:13:06,429 cualquier clase que implemente 286 00:13:06,429 --> 00:13:08,250 colección, de cualquiera que implemente 287 00:13:08,250 --> 00:13:09,269 colección, de esas ya sí 288 00:13:09,269 --> 00:13:12,590 ¿y qué implementaciones 289 00:13:12,590 --> 00:13:14,090 hay de colección? pues hay 290 00:13:14,090 --> 00:13:16,250 un montón de implementaciones de colección 291 00:13:16,250 --> 00:13:17,809 distintas, hay muchísimas 292 00:13:17,809 --> 00:13:20,370 muchas, pues de nuevo 293 00:13:20,370 --> 00:13:22,070 como hay muchas, no sólo 294 00:13:22,070 --> 00:13:24,210 la lista enlazada y el 295 00:13:24,210 --> 00:13:25,990 array list que vimos ayer, sino 296 00:13:25,990 --> 00:13:28,070 muchas otras alternativas aparte de eso 297 00:13:28,070 --> 00:13:30,309 entonces como hay muchas implementaciones 298 00:13:30,309 --> 00:13:31,870 distintas de colección, de nuevo 299 00:13:31,870 --> 00:13:33,549 surgió el problema de 300 00:13:33,549 --> 00:13:36,210 vamos a organizarlas. En lugar de 301 00:13:36,210 --> 00:13:38,250 tener una jerarquía de dos pisos 302 00:13:38,250 --> 00:13:40,029 interfaz colección 303 00:13:40,029 --> 00:13:41,450 y ahora aquí un montón de clases 304 00:13:41,450 --> 00:13:44,029 implementando, dijera vamos a hacer 305 00:13:44,029 --> 00:13:45,909 una jerarquía de tres pisos, así que 306 00:13:45,909 --> 00:13:48,210 más organizadito. Y es vamos a hacer 307 00:13:48,210 --> 00:13:50,190 un primer tipo de división y es 308 00:13:50,190 --> 00:13:52,110 colecciones hay 309 00:13:52,110 --> 00:13:54,590 de dos tipos, listas 310 00:13:54,590 --> 00:13:56,210 y conjuntos. Esa es la primera 311 00:13:56,210 --> 00:13:58,269 división que se hizo. Colecciones hay de dos tipos 312 00:13:58,269 --> 00:13:59,990 listas y conjuntos. 313 00:14:00,309 --> 00:14:08,570 Y luego ya tendré de listas unas cuantas implementaciones y de conjuntos unas cuantas implementaciones. 314 00:14:09,049 --> 00:14:11,590 Entonces, una jerarquía de tres plantas. 315 00:14:11,809 --> 00:14:16,090 Alguna añadida en función de lo que particularice la lista, pero esencialmente de tres plantas. 316 00:14:17,149 --> 00:14:21,990 Vale, pues entonces, Collection, hay dos tipos. 317 00:14:22,830 --> 00:14:24,730 Hay dos tipos de colecciones. 318 00:14:25,269 --> 00:14:30,309 Las listas y los conjuntos. 319 00:14:30,309 --> 00:14:36,279 vale, pues porque hay dos tipos 320 00:14:36,279 --> 00:14:39,700 porque hay dos tipos 321 00:14:39,700 --> 00:14:41,940 bueno, porque se decide que hay dos formas 322 00:14:41,940 --> 00:14:44,019 de funcionar posibles, cuando yo quiero meter 323 00:14:44,019 --> 00:14:46,299 datos de golpe en una colección 324 00:14:46,299 --> 00:14:49,620 puede interesarme 325 00:14:49,620 --> 00:14:51,799 que tengan 326 00:14:51,799 --> 00:14:53,379 una posición fija 327 00:14:53,379 --> 00:14:55,299 o me puede dar igual 328 00:14:55,299 --> 00:14:58,159 son dos situaciones distintas 329 00:14:58,159 --> 00:14:59,360 vale 330 00:14:59,360 --> 00:15:02,039 yo tengo un montón de alumnos y los tengo que almacenar en clase 331 00:15:02,039 --> 00:15:03,700 a lo mejor 332 00:15:03,700 --> 00:15:05,120 necesito tenerlos 333 00:15:05,120 --> 00:15:07,740 a cada uno ubicados en una posición 334 00:15:07,740 --> 00:15:09,960 y que la posición les caracterice 335 00:15:09,960 --> 00:15:11,379 y que sea siempre la misma 336 00:15:11,379 --> 00:15:12,840 me puede interesar eso 337 00:15:12,840 --> 00:15:15,379 o no, o con que estén en el aula 338 00:15:15,379 --> 00:15:17,759 aunque estén rondando puede ser suficiente 339 00:15:17,759 --> 00:15:19,600 son dos formas distintas 340 00:15:19,600 --> 00:15:20,720 de guardar un montón de datos 341 00:15:20,720 --> 00:15:24,080 cada uno en una posición que lo identifica 342 00:15:24,080 --> 00:15:26,519 tú eres Miguel y estás en la mesa 3 343 00:15:26,519 --> 00:15:28,419 tú eres John y estás en la mesa 4 344 00:15:28,419 --> 00:15:29,899 o no, simplemente 345 00:15:29,899 --> 00:15:31,620 tú eres Miguel, tú eres John y me da igual donde estés 346 00:15:31,620 --> 00:15:34,120 son dos filosofías diferentes de almacenamiento 347 00:15:34,120 --> 00:15:37,500 almacenar fijando una posición 348 00:15:37,500 --> 00:15:39,200 y que esa posición te distinga 349 00:15:39,200 --> 00:15:39,840 de los demás 350 00:15:39,840 --> 00:15:42,000 o no fijar una posición 351 00:15:42,000 --> 00:15:44,960 con lo cual si no fijas una posición 352 00:15:44,960 --> 00:15:46,559 lo único que te distingue de los demás 353 00:15:46,559 --> 00:15:48,919 son tus características, no donde estás 354 00:15:48,919 --> 00:15:51,320 entonces son dos filosofías 355 00:15:51,320 --> 00:15:52,220 diferentes de almacenar 356 00:15:52,220 --> 00:15:54,299 en la de las listas 357 00:15:54,299 --> 00:15:56,980 ahí te caracteriza tus propiedades 358 00:15:56,980 --> 00:15:59,120 obviamente, pero también te caracteriza el sitio 359 00:15:59,120 --> 00:16:01,200 donde estás, la posición que se llama 360 00:16:01,200 --> 00:16:01,960 la posición 361 00:16:01,960 --> 00:16:04,840 entonces yo puedo distinguir a Adrián y a Miguel 362 00:16:04,840 --> 00:16:06,279 por donde están 363 00:16:06,279 --> 00:16:08,539 este está en la mesa 2 y este en la mesa 3 364 00:16:08,539 --> 00:16:10,419 no hace falta que les mire 365 00:16:10,419 --> 00:16:13,519 sé que Adrián es el que está ahí y Miguel es el que está ahí 366 00:16:13,519 --> 00:16:15,200 vale, pero en la filosofía de conjunto 367 00:16:15,200 --> 00:16:16,879 como están todos ahí rondando 368 00:16:16,879 --> 00:16:18,960 yo necesito conocer sus características 369 00:16:18,960 --> 00:16:20,899 para distinguirlos, porque solo se distinguen 370 00:16:20,899 --> 00:16:22,940 por sus características, no por donde están 371 00:16:22,940 --> 00:16:24,759 porque no tienen sitio asignado 372 00:16:24,759 --> 00:16:26,759 bueno, pues como hay 373 00:16:26,759 --> 00:16:29,019 esas dos formas de plantearse el almacenamiento 374 00:16:29,019 --> 00:16:29,700 por eso 375 00:16:29,700 --> 00:16:33,000 hay dos tipos de colecciones 376 00:16:33,000 --> 00:16:34,679 las listas y los conjuntos 377 00:16:34,679 --> 00:16:37,539 en las listas la posición cuenta 378 00:16:37,539 --> 00:16:40,299 y cada objeto tiene su posición en la lista 379 00:16:40,299 --> 00:16:42,700 empezando desde la 0 380 00:16:42,700 --> 00:16:45,200 la posición 0, la 1, la 2, la 3 381 00:16:45,200 --> 00:16:48,259 en los conjuntos la posición no cuenta 382 00:16:48,259 --> 00:16:50,919 y cada objeto está en el conjunto 383 00:16:50,919 --> 00:16:53,519 y no tiene posición asignada 384 00:16:53,519 --> 00:16:55,799 simplemente está o no está 385 00:16:55,799 --> 00:16:57,700 ya está, o está o no está 386 00:16:57,700 --> 00:17:00,019 en la lista estás 387 00:17:00,019 --> 00:17:01,240 y estás en una posición 388 00:17:01,240 --> 00:17:03,240 en el conjunto estás 389 00:17:03,240 --> 00:17:04,539 ¿vale? 390 00:17:05,980 --> 00:17:07,859 entonces, es más fácil 391 00:17:07,859 --> 00:17:09,640 manejar un conjunto 392 00:17:09,640 --> 00:17:11,900 computacionalmente, es más eficiente 393 00:17:11,900 --> 00:17:14,000 un conjunto, porque todo el tema 394 00:17:14,000 --> 00:17:15,980 de la posición no tienes que llevarlo siempre 395 00:17:15,980 --> 00:17:18,240 arrastrado, no tienes que llevar las cuentas 396 00:17:18,240 --> 00:17:19,779 computacionalmente, es más fácil 397 00:17:19,779 --> 00:17:21,680 computacionalmente es más 398 00:17:21,680 --> 00:17:23,819 sencillo, pero es que hay veces 399 00:17:23,819 --> 00:17:26,119 que hace falta tener el registro 400 00:17:26,119 --> 00:17:26,680 de la posición 401 00:17:26,680 --> 00:17:34,450 y por qué a veces hace falta 402 00:17:34,450 --> 00:17:35,849 es decir 403 00:17:35,849 --> 00:17:38,309 porque a efectos computacionales 404 00:17:38,309 --> 00:17:40,349 uno elegiría siempre un conjunto 405 00:17:40,349 --> 00:17:41,990 diría no, yo quiero meter un montón de datos 406 00:17:41,990 --> 00:17:44,150 pues un montón de datos es un conjunto, ya está 407 00:17:44,150 --> 00:17:46,710 pero hay veces que el conjunto 408 00:17:46,710 --> 00:17:48,349 no te vale, necesitas una lista 409 00:17:48,349 --> 00:17:50,630 y en qué situaciones no te vale 410 00:17:50,630 --> 00:17:52,410 el conjunto, necesitas una lista 411 00:17:52,410 --> 00:17:54,470 pues cuando 412 00:17:54,470 --> 00:17:56,670 tú quieres tener elementos 413 00:17:56,670 --> 00:17:58,069 duplicados 414 00:17:58,069 --> 00:17:59,430 o repetidos 415 00:17:59,430 --> 00:18:01,150 ¿vale? 416 00:18:01,609 --> 00:18:03,349 o sea, yo quiero guardar 417 00:18:03,349 --> 00:18:06,349 bolas verdes y bolas rojas 418 00:18:06,349 --> 00:18:08,869 en un conjunto 419 00:18:08,869 --> 00:18:11,549 como no tiene una posición asignada 420 00:18:11,549 --> 00:18:12,890 yo solo puedo distinguir 421 00:18:12,890 --> 00:18:14,549 una bola verde y una bola roja 422 00:18:14,549 --> 00:18:17,029 el resto es que son indistinguibles 423 00:18:17,029 --> 00:18:18,190 porque están ahí flotando 424 00:18:18,190 --> 00:18:20,109 no puedo distinguir las bolas verdes entre sí 425 00:18:20,109 --> 00:18:20,849 es imposible 426 00:18:20,849 --> 00:18:22,990 una vez que están metidas en el conjunto 427 00:18:22,990 --> 00:18:25,670 todas las bolas verdes son indistinguibles 428 00:18:25,670 --> 00:18:27,890 pero una lista 429 00:18:27,890 --> 00:18:30,650 las puedo distinguir porque cada bola verde 430 00:18:30,650 --> 00:18:32,630 tiene su sitio y una vez que yo las he metido 431 00:18:32,630 --> 00:18:34,230 sé que esa es la primera que metí 432 00:18:34,230 --> 00:18:36,470 y sé que esa es la segunda y sé que esa es la tercera 433 00:18:36,470 --> 00:18:38,930 las puedo distinguir porque cada una tiene su posición 434 00:18:38,930 --> 00:18:40,410 si yo las he hecho en un conjunto 435 00:18:40,410 --> 00:18:42,789 una vez metidas, no sé cuál es la primera que metí 436 00:18:42,789 --> 00:18:44,650 no sé cuál es la segunda, no tengo ni idea 437 00:18:44,650 --> 00:18:46,769 porque no las puedo distinguir por la posición 438 00:18:46,769 --> 00:18:48,890 luego el criterio 439 00:18:48,890 --> 00:18:50,049 para decidir 440 00:18:50,049 --> 00:18:52,930 qué tipo de colección usa alguien para meter sus datos 441 00:18:52,930 --> 00:18:54,650 si lista o conjunto 442 00:18:54,650 --> 00:18:55,329 es 443 00:18:55,329 --> 00:18:58,029 si necesita distinguir 444 00:18:58,029 --> 00:18:59,069 los duplicados 445 00:18:59,069 --> 00:19:01,349 o no, es decir 446 00:19:01,349 --> 00:19:03,470 si quiere que haya elementos duplicados 447 00:19:03,470 --> 00:19:05,250 o si no quiere que los haya 448 00:19:05,250 --> 00:19:07,470 porque el conjunto 449 00:19:07,470 --> 00:19:09,049 no permite meter 450 00:19:09,049 --> 00:19:10,890 elementos duplicados 451 00:19:10,890 --> 00:19:15,210 yo tengo la cadena hola 452 00:19:15,210 --> 00:19:17,390 por ejemplo, la meto en la lista 453 00:19:17,390 --> 00:19:19,210 ahí se queda la cadena hola 454 00:19:19,210 --> 00:19:21,529 ahora meto la cadena dios 455 00:19:21,529 --> 00:19:23,710 muy bien, se queda en la lista, en su segunda posición 456 00:19:23,710 --> 00:19:25,450 vale, ahora meto una cadena 457 00:19:25,450 --> 00:19:27,170 que es hola otra vez, genial 458 00:19:27,170 --> 00:19:29,289 aquí se queda en su tercera posición 459 00:19:29,289 --> 00:19:30,910 perfectamente distinguible de la primera 460 00:19:30,910 --> 00:19:33,309 son dos cadenas hola, pero esta está aquí y esta está aquí 461 00:19:33,309 --> 00:19:35,430 y así puedo trabajar, en un conjunto 462 00:19:35,430 --> 00:19:37,609 esto mismo, yo meto la cadena 463 00:19:37,609 --> 00:19:39,670 hola, fenomenal, ahí se queda la cadena hola en mi conjunto 464 00:19:39,670 --> 00:19:41,470 ahora meto la cadena dios 465 00:19:41,470 --> 00:19:43,009 fenomenal, ahí se queda en mi conjunto 466 00:19:43,009 --> 00:19:45,369 ahora intento meter la cadena hola 467 00:19:45,369 --> 00:19:47,630 otra vez en el conjunto, no me deja 468 00:19:47,630 --> 00:19:49,529 la colección no me deja 469 00:19:49,529 --> 00:19:51,450 me dice no, ya hay una cadena 470 00:19:51,450 --> 00:19:53,309 que se llama hola, no la puedes meter otra 471 00:19:53,309 --> 00:19:55,670 igual porque sería indistinguible, es imposible 472 00:19:55,670 --> 00:19:57,369 no tiene posición asignada 473 00:19:57,369 --> 00:19:59,509 entonces a un conjunto 474 00:19:59,509 --> 00:20:01,829 no se le pueden meter elementos repetidos 475 00:20:01,829 --> 00:20:03,529 está hecha de tal 476 00:20:03,529 --> 00:20:05,329 forma que no te deja, no puedes meter 477 00:20:05,329 --> 00:20:07,329 elementos repetidos, no puedes 478 00:20:07,329 --> 00:20:09,269 a una lista sí, porque son 479 00:20:09,269 --> 00:20:11,109 perfectamente distinguibles por posición 480 00:20:11,109 --> 00:20:13,329 luego eso 481 00:20:13,329 --> 00:20:15,150 es lo que nos hace elegir si queremos 482 00:20:15,150 --> 00:20:16,569 uno o si queremos el otro 483 00:20:16,569 --> 00:20:19,349 si queremos que mi almacén de datos 484 00:20:19,349 --> 00:20:20,869 haya repetidos 485 00:20:20,869 --> 00:20:23,190 o no necesito yo que haya 486 00:20:23,190 --> 00:20:25,049 repetidos, no lo necesito 487 00:20:25,049 --> 00:20:27,089 si necesito que haya 488 00:20:27,089 --> 00:20:28,390 repetidos una lista 489 00:20:28,390 --> 00:20:31,190 y si no lo necesito, si todos los 490 00:20:31,190 --> 00:20:33,410 elementos que yo emeta van a ser distintos 491 00:20:33,410 --> 00:20:35,130 distinguibles 492 00:20:35,130 --> 00:20:37,049 por sus propiedades, distinguibles por 493 00:20:37,049 --> 00:20:39,369 propiedades, pues elegiría un conjunto 494 00:20:39,369 --> 00:20:40,250 que es más eficiente 495 00:20:40,250 --> 00:20:43,150 computacionalmente, porque no tiene 496 00:20:43,150 --> 00:20:44,569 que llevar registro de posición ni de nada 497 00:20:44,569 --> 00:20:45,769 luego eso es 498 00:20:45,769 --> 00:20:49,089 la distinción de los dos tipos de colecciones 499 00:20:49,089 --> 00:20:50,529 que hay, listas y conjuntos 500 00:20:50,529 --> 00:20:53,089 vale, pues como hay dos tipos, entonces dicen 501 00:20:53,089 --> 00:20:56,230 ¿Vale? Pues vamos a hacer dos implementaciones de colección. 502 00:20:56,589 --> 00:20:59,329 Una que se llama list y otra que se llama set. 503 00:21:00,150 --> 00:21:02,190 List, pues de listas, obviamente. 504 00:21:04,650 --> 00:21:13,640 Y set de conjuntos. 505 00:21:14,019 --> 00:21:16,740 ¿Vale? Son dos implementaciones distintas. 506 00:21:20,920 --> 00:21:24,160 Entonces, si yo escribo aquí list para poder entrar en ella, 507 00:21:24,160 --> 00:21:33,339 voy a escribir aquí list para list. 508 00:21:33,339 --> 00:21:35,160 como veis, pues está en 509 00:21:35,160 --> 00:21:36,960 su Java útil también 510 00:21:36,960 --> 00:21:41,289 vale, pues si entramos en list 511 00:21:41,289 --> 00:21:44,819 de Java útil 512 00:21:44,819 --> 00:21:45,420 en esta 513 00:21:45,420 --> 00:21:49,000 pues list resulta que otra vez 514 00:21:49,000 --> 00:21:49,779 es una interfaz 515 00:21:49,779 --> 00:21:51,960 vale 516 00:21:51,960 --> 00:21:58,660 a través de esta 517 00:21:58,660 --> 00:22:01,859 implementa la de arriba 518 00:22:01,859 --> 00:22:03,839 la de colección, pero bueno, la jerarquía exacta 519 00:22:03,839 --> 00:22:05,859 no nos importa porque esto se le han ido metiendo 520 00:22:05,859 --> 00:22:07,880 chorraditas y es un caos 521 00:22:07,880 --> 00:22:09,400 vale, entonces 522 00:22:09,400 --> 00:22:11,460 quedaos con que list y set 523 00:22:11,460 --> 00:22:14,519 son los dos tipos de implementaciones 524 00:22:14,519 --> 00:22:16,500 que hay de las colecciones, listas y conjuntos 525 00:22:16,500 --> 00:22:18,319 pero resulta que list 526 00:22:18,319 --> 00:22:19,660 a su vez es otra interfaz 527 00:22:19,660 --> 00:22:22,380 porque claro, list 528 00:22:22,380 --> 00:22:24,440 lo que dice es vale, pero hay diferentes 529 00:22:24,440 --> 00:22:26,460 tipos de listas, ayer vimos 530 00:22:26,460 --> 00:22:27,539 dos, el array list 531 00:22:27,539 --> 00:22:29,500 la lista enlazada 532 00:22:29,500 --> 00:22:31,779 entonces list todavía 533 00:22:31,779 --> 00:22:34,559 no puede pronunciarse 534 00:22:34,559 --> 00:22:36,420 respecto a cómo va a hacer el add, cómo va a hacer 535 00:22:36,420 --> 00:22:37,539 el remove, todavía no puede 536 00:22:37,539 --> 00:22:40,160 porque hay diferentes variantes 537 00:22:40,160 --> 00:22:42,980 lo que hace list es a los métodos 538 00:22:42,980 --> 00:22:45,200 básicos de cualquier colección, al add, al remove 539 00:22:45,200 --> 00:22:47,480 le añade los propios de las listas 540 00:22:47,480 --> 00:22:48,680 que son los que usan la posición 541 00:22:48,680 --> 00:22:50,039 los que usan la posición 542 00:22:50,039 --> 00:22:51,660 por ejemplo 543 00:22:51,660 --> 00:22:55,039 estos que tenía colección 544 00:22:55,039 --> 00:22:57,180 los tiene pero los sigue dejando 545 00:22:57,180 --> 00:22:59,079 vacíos, los sigue dejando vacíos 546 00:22:59,079 --> 00:23:01,099 porque todavía no puede darles cuerpo 547 00:23:01,099 --> 00:23:02,960 porque depende del tipo de lista que sea 548 00:23:02,960 --> 00:23:04,480 si es a raíz, si es enlazada 549 00:23:04,480 --> 00:23:07,019 y añade otros vacíos 550 00:23:07,019 --> 00:23:08,440 que no estaban en colección 551 00:23:08,440 --> 00:23:10,839 que son los relacionados con la posición. 552 00:23:12,119 --> 00:23:12,480 Como 553 00:23:12,480 --> 00:23:17,390 este ya lo añadía, 554 00:23:17,490 --> 00:23:18,289 pero vamos a poner uno. 555 00:23:19,809 --> 00:23:20,970 Vamos a buscar el get. 556 00:23:21,690 --> 00:23:23,029 A ver si nos aparece por ahí. 557 00:23:23,589 --> 00:23:24,069 Rápidamente. 558 00:23:26,289 --> 00:23:26,990 Aquí está. 559 00:23:27,630 --> 00:23:29,390 Por ejemplo, este método no estaba 560 00:23:29,390 --> 00:23:31,450 en collection, porque este 561 00:23:31,450 --> 00:23:33,670 método de list te dice, recupérame 562 00:23:33,670 --> 00:23:35,470 el elemento de posición 563 00:23:35,470 --> 00:23:37,509 tal. Esto solo tiene sentido 564 00:23:37,509 --> 00:23:39,269 en una lista, porque 565 00:23:39,269 --> 00:23:41,210 solo en una lista los elementos tienen 566 00:23:41,210 --> 00:23:42,769 posición. Solo en la lista. 567 00:23:43,690 --> 00:23:44,930 En los conjuntos no la tienen. 568 00:23:45,329 --> 00:23:46,769 Y en las colecciones genéricas tampoco. 569 00:23:46,970 --> 00:23:48,569 Una colección genérica no tiene por qué ser una lista. 570 00:23:49,910 --> 00:23:51,269 Entonces, este método lo ha 571 00:23:51,269 --> 00:23:52,849 incorporado a la interfaz list. 572 00:23:53,210 --> 00:23:54,430 Lo ha incorporado a la interfaz list. 573 00:23:55,250 --> 00:23:57,210 Porque para las listas sí tiene 574 00:23:57,210 --> 00:23:58,430 sentido recuperar por posición. 575 00:23:59,250 --> 00:24:00,730 Ha incorporado ese método 576 00:24:00,730 --> 00:24:03,109 y todos los relacionados con hacer 577 00:24:03,109 --> 00:24:03,930 cosas por posición. 578 00:24:05,250 --> 00:24:06,670 Porque las listas 579 00:24:06,670 --> 00:24:08,150 trabajan con posiciones. 580 00:24:09,269 --> 00:24:49,819 Sin embargo en el set por mucho que busquemos get por posición no lo vamos a encontrar, si yo me voy aquí a la interfaz set que a su vez es otra interfaz, de esta tampoco puedo instanciar, tiene implementaciones ya concretas, si me voy a la interfaz set, pues esta por mucho que busquemos el get por posición no lo tiene, ni tiene ningún método que recurra a posiciones, porque no existen. 581 00:24:49,819 --> 00:24:51,940 Tiene 582 00:24:51,940 --> 00:24:55,859 Los que tienen que implementar cualquier conjunto 583 00:24:55,859 --> 00:24:58,160 Los que ha añadido que le gustan 584 00:24:58,160 --> 00:24:59,700 Para trabajar con conjuntos 585 00:24:59,700 --> 00:25:00,640 Y poquita cosa 586 00:25:00,640 --> 00:25:03,319 Ni tiene get, ni tiene nada 587 00:25:03,319 --> 00:25:06,700 Esto ya se acaba rapidísimo 588 00:25:06,700 --> 00:25:08,480 No tiene muchos métodos 589 00:25:08,480 --> 00:25:13,230 Ya estamos casi al final 590 00:25:13,230 --> 00:25:15,450 Y ni ha aparecido get, ni ha aparecido en ningún sitio 591 00:25:15,450 --> 00:25:16,549 Ni index, ni nada 592 00:25:16,549 --> 00:25:18,089 ¿Vale? 593 00:25:22,599 --> 00:25:25,240 Bueno, pues estos son los dos tipos de colecciones 594 00:25:25,240 --> 00:25:28,019 Luego hay otra forma de guardar datos 595 00:25:28,019 --> 00:25:29,119 Que es 596 00:25:29,119 --> 00:25:30,700 Que se usa muchísimo 597 00:25:30,700 --> 00:25:33,599 Que es el concepto de diccionario en informática 598 00:25:33,599 --> 00:25:36,640 Muchos datos van asociados a una clave 599 00:25:36,640 --> 00:25:39,680 Ya lo habéis visto en bases de datos 600 00:25:39,680 --> 00:25:41,359 Y la clave 601 00:25:41,359 --> 00:25:43,680 Nos sirve para distinguir a unos de otros 602 00:25:43,680 --> 00:25:44,880 O sea, el concepto de clave 603 00:25:44,880 --> 00:25:46,759 En informática es básico 604 00:25:46,759 --> 00:25:49,339 Clave es algo que identifica de forma única 605 00:25:49,339 --> 00:25:51,339 Cualquier cosa 606 00:25:51,339 --> 00:25:53,240 Cualquier cosa 607 00:25:53,240 --> 00:25:53,940 Eso es la clave 608 00:25:53,940 --> 00:25:55,980 entonces por eso hay una estructura 609 00:25:55,980 --> 00:25:58,900 habitual en informática que son los pares 610 00:25:58,900 --> 00:26:00,599 clave, valor 611 00:26:00,599 --> 00:26:02,880 esta clave, su valor 612 00:26:02,880 --> 00:26:04,259 esta clave, su valor 613 00:26:04,259 --> 00:26:05,680 que es el diccionario de toda la vida 614 00:26:05,680 --> 00:26:08,299 palabra, significado, palabra, significado 615 00:26:08,299 --> 00:26:09,380 palabra, significado 616 00:26:09,380 --> 00:26:12,119 todas las palabras del diccionario son distintas 617 00:26:12,119 --> 00:26:14,279 por eso son claves, aunque puedan compartir 618 00:26:14,279 --> 00:26:15,079 significados 619 00:26:15,079 --> 00:26:18,680 bueno, pues una forma habitual 620 00:26:18,680 --> 00:26:19,779 de guardar datos 621 00:26:19,779 --> 00:26:22,339 en informática es 622 00:26:22,339 --> 00:26:24,859 pares, clave, valor, clave, valor, clave, valor. 623 00:26:25,799 --> 00:26:28,720 Entonces, esto no nos vale para guardar pares, 624 00:26:29,000 --> 00:26:30,579 nos vale para guardar objetos. 625 00:26:31,019 --> 00:26:33,960 Otra cosa es que dentro de ese objeto yo decida los campos que yo quiera, 626 00:26:34,119 --> 00:26:36,619 los que yo quiero, como si quiero que los campos sean una clave y un valor. 627 00:26:37,440 --> 00:26:39,920 Pero esto está pensado para guardar un objeto. 628 00:26:42,059 --> 00:26:45,359 Entonces, para adaptarnos a guardar pares, clave, valor, clave, valor, 629 00:26:45,460 --> 00:26:49,240 o sea, pares de datos, no solo uno, como aquí, sino pares, 630 00:26:49,240 --> 00:26:51,859 puestas a otra estructura que son los mapas 631 00:26:51,859 --> 00:26:53,960 pero esos van por libres, esos no heredan 632 00:26:53,960 --> 00:26:55,619 de colección, esos van por libre 633 00:26:55,619 --> 00:26:56,359 ¿vale? 634 00:26:57,559 --> 00:27:00,079 los veremos cuando hayamos visto esto de colección 635 00:27:00,079 --> 00:27:03,539 bueno pues entonces 636 00:27:03,539 --> 00:27:05,819 tenemos listas y conjuntos y ahora 637 00:27:05,819 --> 00:27:07,980 ya si, de listas 638 00:27:07,980 --> 00:27:10,240 ahora ya si que hay implementaciones 639 00:27:10,240 --> 00:27:12,000 concretas que ya podemos usar 640 00:27:12,000 --> 00:27:14,019 y de conjuntos 641 00:27:14,019 --> 00:27:15,839 hay implementaciones concretas 642 00:27:15,839 --> 00:27:16,579 que podemos usar 643 00:27:16,579 --> 00:27:31,680 ¿Vale? Ya entendiendo, Andrés, ya entendiendo lo que es cada una y en qué situaciones me interesa a mí elegir de este tipo, elegir de este tipo, pues ya podemos usar implementaciones concretas que ya están hechas. 644 00:27:32,200 --> 00:27:37,140 No tenemos que hacerlas nosotros, como ayer, porque ya están hechas. 645 00:27:39,140 --> 00:27:45,079 Bueno, pues vamos a ver implementaciones concretas de list, de la clase list. 646 00:27:45,079 --> 00:28:36,440 Vale, bueno, voy a buscar, para que veáis simplemente un pantallazo de la jerarquía de colecciones, vamos a poner internet, vale, pues vamos a ver, aquí esto nos da, vale, a ver si nos sale algo bonito. 647 00:28:36,440 --> 00:29:00,210 vale, pues esta es un poquito 648 00:29:00,210 --> 00:29:02,289 la jerarquía, con clases que están 649 00:29:02,289 --> 00:29:04,089 ahí metidas, pero no os volváis 650 00:29:04,089 --> 00:29:05,690 locos con esta jerarquía 651 00:29:05,690 --> 00:29:08,210 lo que aquí nos tenemos 652 00:29:08,210 --> 00:29:09,710 esta interfaz 653 00:29:09,710 --> 00:29:12,210 colección, lo que pasa es que hay una por encima 654 00:29:12,210 --> 00:29:14,089 que es iterable 655 00:29:14,089 --> 00:29:16,450 que incorpora 656 00:29:16,450 --> 00:29:18,430 el concepto de si yo tengo un montón de datos 657 00:29:18,430 --> 00:29:20,269 un montón de datos, la idea es que yo 658 00:29:20,269 --> 00:29:21,529 pueda iterar por ellos 659 00:29:21,529 --> 00:29:24,410 entonces se hace una interfaz iterable que es cualquier 660 00:29:24,410 --> 00:29:25,549 cosa por la que tu 661 00:29:25,549 --> 00:29:28,329 por la que se pueda iterar que implemente 662 00:29:28,329 --> 00:29:30,210 iterable, es una cosa más genérica 663 00:29:30,210 --> 00:29:32,170 de colección, que es cualquier cosa por la que se 664 00:29:32,170 --> 00:29:34,150 pueda iterar, bueno pues 665 00:29:34,150 --> 00:29:36,230 una colección debería poder 666 00:29:36,230 --> 00:29:38,089 ser iterable también, entonces 667 00:29:38,089 --> 00:29:40,009 colección implementa de esta iterable que 668 00:29:40,009 --> 00:29:41,950 incorpora un método iterador simplemente 669 00:29:41,950 --> 00:29:43,750 para iterar por ella y ya está 670 00:29:43,750 --> 00:29:46,289 y hay más clases por ahí que implementan iterable, no solo esta 671 00:29:46,289 --> 00:29:47,890 vale, pues bueno 672 00:29:47,890 --> 00:29:49,910 pues colección es la 673 00:29:49,910 --> 00:29:51,569 gran super clase 674 00:29:51,569 --> 00:29:53,529 solo tiene por encima esta 675 00:29:53,529 --> 00:29:56,710 Que esta incorpora simplemente 676 00:29:56,710 --> 00:29:58,809 La funcionalidad de ser iterado 677 00:29:58,809 --> 00:30:00,089 Por dentro, ser recorrido 678 00:30:00,089 --> 00:30:01,170 Collection 679 00:30:01,170 --> 00:30:04,630 Y luego Collection tiene 680 00:30:04,630 --> 00:30:06,009 Lo que pasa es que 681 00:30:06,009 --> 00:30:08,190 Este dibujo es horrible 682 00:30:08,190 --> 00:30:10,470 Porque no aparecen ni las estas 683 00:30:10,470 --> 00:30:10,950 Ni nada 684 00:30:10,950 --> 00:30:14,049 A ver si hay uno más bonito aquí 685 00:30:14,049 --> 00:30:21,400 Bueno, este es un poco más 686 00:30:21,400 --> 00:30:21,759 Claro 687 00:30:21,759 --> 00:30:30,559 Este es un poquito más 688 00:30:30,559 --> 00:30:31,420 Bueno, lo que pasa es que 689 00:30:31,420 --> 00:30:33,240 Aquí no vienen las de abajo 690 00:30:33,240 --> 00:30:37,579 venga, vamos a ver este 691 00:30:37,579 --> 00:30:48,930 ah, no, este es el criterio 692 00:30:48,930 --> 00:30:50,349 nada, esto, además esto es 693 00:30:50,349 --> 00:31:00,529 esto es muy malo 694 00:31:00,529 --> 00:31:05,559 set, vale 695 00:31:05,559 --> 00:31:24,480 vale, bueno 696 00:31:24,480 --> 00:31:26,319 esta es un poco más clara 697 00:31:26,319 --> 00:31:28,480 vale, esta es 698 00:31:28,480 --> 00:31:30,559 collection y collection 699 00:31:30,559 --> 00:31:32,160 tiene list 700 00:31:32,160 --> 00:31:34,640 y set, que a su vez son interfaces 701 00:31:34,640 --> 00:31:35,940 vale 702 00:31:35,940 --> 00:31:38,500 y list tiene 703 00:31:38,500 --> 00:31:40,480 tres implementaciones 704 00:31:40,779 --> 00:31:42,819 lo que pasa es que esta es muy 705 00:31:42,819 --> 00:31:43,400 anticuada 706 00:31:43,400 --> 00:31:45,640 ¿qué implementaciones tiene list? 707 00:31:46,019 --> 00:31:48,000 ArrayList, la que hicimos ayer 708 00:31:48,000 --> 00:31:50,720 la que habéis hecho un montón de veces 709 00:31:50,720 --> 00:31:52,660 ArrayList guarda 710 00:31:52,660 --> 00:31:53,700 sus datos en un array 711 00:31:53,700 --> 00:31:56,460 y añadir es romper el array 712 00:31:56,460 --> 00:31:58,319 hacer uno más grande y copiar y pegar 713 00:31:58,319 --> 00:32:00,420 eso es app, borrar 714 00:32:00,420 --> 00:32:02,200 pues lo mismo, pues eso es ArrayList 715 00:32:02,200 --> 00:32:04,039 ¿y luego qué tiene? 716 00:32:04,140 --> 00:32:06,019 y LinkedList, también 717 00:32:06,019 --> 00:32:08,599 implementa, y LinkedList es la lista 718 00:32:08,599 --> 00:32:09,599 enlazada que hicimos ayer 719 00:32:09,599 --> 00:32:11,519 esa es, linked list 720 00:32:11,519 --> 00:32:13,859 luego tiene vector porque esta es una del año 721 00:32:13,859 --> 00:32:15,240 catapunt que 722 00:32:15,240 --> 00:32:17,880 estas cosas no se 723 00:32:17,880 --> 00:32:20,059 eliminan por compatibilidad 724 00:32:20,059 --> 00:32:21,940 de código, esta la verdad es que 725 00:32:21,940 --> 00:32:23,859 es sincronizada, entonces para hilos se sigue 726 00:32:23,859 --> 00:32:25,359 usando algunas veces, pero bueno 727 00:32:25,359 --> 00:32:27,960 la de vector podéis olvidarla un poco 728 00:32:27,960 --> 00:32:29,960 porque es una versión muy antigua 729 00:32:29,960 --> 00:32:32,319 de las listas 730 00:32:32,319 --> 00:32:33,559 enlazadas 731 00:32:33,559 --> 00:32:34,380 ¿vale? 732 00:32:35,440 --> 00:32:37,819 y set que tiene, set tiene tres 733 00:32:37,819 --> 00:32:39,519 implementaciones fundamentales, tiene 734 00:32:39,519 --> 00:32:40,220 haset 735 00:32:40,220 --> 00:32:43,519 esta que es un caso particular 736 00:32:43,519 --> 00:32:45,740 de haset y esta que es 737 00:32:45,740 --> 00:32:47,720 triset, que es el arbolito 738 00:32:47,720 --> 00:32:48,579 que dibujamos ayer 739 00:32:48,579 --> 00:32:51,460 a través de unas interfaces que le añaden 740 00:32:51,460 --> 00:32:53,240 cositas, pero son estas tres, esta 741 00:32:53,240 --> 00:32:55,619 esta y esta, son las tres 742 00:32:55,619 --> 00:32:57,819 que hay de conjuntos y de listas 743 00:32:57,819 --> 00:32:58,779 son estas tres 744 00:32:58,779 --> 00:33:01,220 pero que sobre todo las que nos interesan son 745 00:33:01,220 --> 00:33:03,900 ArrayList y LinkedList, esto podéis olvidarlo 746 00:33:03,900 --> 00:33:05,240 y esto de Q 747 00:33:05,240 --> 00:33:07,519 es porque el concepto de colas y pilas 748 00:33:07,519 --> 00:33:09,160 en informática se usa muchísimo 749 00:33:09,160 --> 00:33:12,740 son formas de funcionar 750 00:33:12,740 --> 00:33:14,380 pues una cola 751 00:33:14,380 --> 00:33:16,740 es modela, modela cualquier sistema 752 00:33:16,740 --> 00:33:18,319 en sistemas operativos 753 00:33:18,319 --> 00:33:19,559 en procesos, en todo 754 00:33:19,559 --> 00:33:22,019 entonces colas hay de muchos tipos 755 00:33:22,019 --> 00:33:24,279 pues la lifo, el último que entra 756 00:33:24,279 --> 00:33:25,259 es el primero que se va 757 00:33:25,259 --> 00:33:27,200 esto es 758 00:33:27,200 --> 00:33:31,460 ay no tengo el rotulador 759 00:33:31,460 --> 00:33:33,839 pero 760 00:33:33,839 --> 00:33:35,339 el concepto de pila 761 00:33:35,339 --> 00:33:37,759 lo conocéis, es una forma 762 00:33:37,759 --> 00:33:41,980 de almacenar en la cual tú vas guardando datos, pero como van apilados 763 00:33:41,980 --> 00:33:45,500 unos encima de otros, cuando tienes que sacarlos 764 00:33:45,500 --> 00:33:49,759 el que sacas siempre es el último que metiste, eso es la pila 765 00:33:49,759 --> 00:33:53,880 una forma de almacenar datos apilados, donde tú lo único que puedes hacer es 766 00:33:53,880 --> 00:33:57,519 meter y sacar, y cuando sacas 767 00:33:57,519 --> 00:34:02,059 estás sacando siempre obligatoriamente el último que metiste 768 00:34:02,059 --> 00:34:06,099 eso es una pila, un caso particular de almacenamiento 769 00:34:06,099 --> 00:34:07,980 un caso particular de almacenamiento 770 00:34:07,980 --> 00:34:09,840 que te dan las opciones de 771 00:34:09,840 --> 00:34:12,420 meter, apilar o sacar 772 00:34:12,420 --> 00:34:13,599 ¿vale? 773 00:34:14,039 --> 00:34:16,440 y cuando sacas, lo que sacas siempre 774 00:34:16,440 --> 00:34:18,280 es el último que metiste 775 00:34:18,280 --> 00:34:19,699 porque si están apilados es normal 776 00:34:19,699 --> 00:34:21,440 entonces la pila es un 777 00:34:21,440 --> 00:34:24,539 procedimiento de almacenaje muy habitual 778 00:34:24,539 --> 00:34:25,380 en 779 00:34:25,380 --> 00:34:26,420 en 780 00:34:26,420 --> 00:34:28,739 en procesos 781 00:34:28,739 --> 00:34:31,199 cuando el sistema operativo va anidando 782 00:34:31,199 --> 00:34:33,380 procesos, pues el último que anido es el 783 00:34:33,380 --> 00:34:35,340 primero que saca, etc. 784 00:34:35,340 --> 00:34:38,679 Esa sería la pila 785 00:34:38,679 --> 00:34:41,059 Luego está la cola de toda la vida 786 00:34:41,059 --> 00:34:42,960 Que es al contrario, si van llegando por aquí 787 00:34:42,960 --> 00:34:44,800 Meter, se mete por aquí 788 00:34:44,800 --> 00:34:46,599 Pero sacar se saca por otro lado 789 00:34:46,599 --> 00:34:48,179 Con lo cual el primero que sale 790 00:34:48,179 --> 00:34:49,980 Es el primero que entró 791 00:34:49,980 --> 00:34:52,099 Es otra forma de funcionar 792 00:34:52,099 --> 00:34:54,960 Entonces son conceptos habituales de informática 793 00:34:54,960 --> 00:34:56,360 Pues para simularlos 794 00:34:56,360 --> 00:34:58,920 Simularlos está esto 795 00:34:58,920 --> 00:35:00,900 Están las colas, esta interfaz 796 00:35:00,900 --> 00:35:03,000 Que te ofrece los métodos 797 00:35:03,000 --> 00:35:04,280 Típicos para estas estructuras 798 00:35:04,280 --> 00:35:07,320 apilar, desapilar, encolar, desencolar 799 00:35:07,320 --> 00:35:08,719 pero esto está hecho por dentro 800 00:35:08,719 --> 00:35:10,440 igual que una lista enlazada, está hecho igual 801 00:35:10,440 --> 00:35:12,960 ¿vale? por eso esto implementa hasta de aquí 802 00:35:12,960 --> 00:35:16,860 entonces aquí hay un conjunto de clases 803 00:35:16,860 --> 00:35:18,139 que son las que nos interesan 804 00:35:18,139 --> 00:35:20,280 los conjuntos 805 00:35:20,280 --> 00:35:22,119 haset, linked haset y triset 806 00:35:22,119 --> 00:35:24,039 que son las tres 807 00:35:24,039 --> 00:35:26,679 implementaciones de conjunto 808 00:35:26,679 --> 00:35:29,179 las listas, array list y linked list 809 00:35:29,179 --> 00:35:30,440 vector 810 00:35:30,440 --> 00:35:32,559 es igual pero más antigua 811 00:35:32,559 --> 00:35:40,360 Y LinkedList además ofrece métodos para simular el funcionamiento de las pilas, de las colas, etc. 812 00:35:41,019 --> 00:35:45,420 Este es más o menos el vistazo de cómo está organizada la jerarquía de colecciones de Java. 813 00:35:45,920 --> 00:35:48,079 Este es un poco el vistazo de cómo se ha organizado. 814 00:35:48,159 --> 00:35:48,840 Se ha organizado así. 815 00:35:50,199 --> 00:35:59,300 Bueno, pues ahora después del cambio, vemos un poquito el uso de las listas, que no es tan trivial. 816 00:35:59,300 --> 00:36:02,860 Vale, pues venga, vamos a parar aquí entonces