0 00:00:00,000 --> 00:00:09,000 Si habláis en este momento, como estoy grabando, me autorizáis a grabar vuestra voz. 1 00:00:09,000 --> 00:00:26,000 Esta va a ser una sesión de teoría bastante breve, para introducir un concepto y para que sepáis que exista y que luego ahora lo utilizaremos en la otra parte de la clase. 2 00:00:26,000 --> 00:00:31,000 No voy a grabar porque como es implementación, luego os doy el resultado de la implementación. 3 00:00:31,000 --> 00:00:34,000 Y es el siguiente concepto. 4 00:00:34,000 --> 00:00:49,000 Nosotros estamos acostumbrados a jugar, a utilizar clases que tienen dentro definidos los tipos de los atributos que vamos a utilizar. 5 00:00:49,000 --> 00:00:57,000 Yo tengo la clase Persona, dentro tiene un objeto String que es el nombre, tiene un Int que es una edad, etc. 6 00:00:57,000 --> 00:01:15,000 Puede haber situaciones y casos en el que yo tengo una clase que dentro utiliza algo, utiliza un atributo, pero el tipo de este atributo no me queda claro a priori. 7 00:01:16,000 --> 00:01:22,000 Imaginaos, así es para hacer un ejemplo teórico, una bolsa. 8 00:01:22,000 --> 00:01:27,000 Vosotros tenéis la clase Bolsa, donde dentro podéis poner lo que os da la gana. 9 00:01:27,000 --> 00:01:37,000 Y un día dentro de la bolsa podéis poner el objeto Coche, otro día podéis poner el objeto Calculadora, y otro día podéis poner el objeto Rectángulo. 10 00:01:37,000 --> 00:01:48,000 Y que luego vuestra bolsa haga algo con este objeto, dependiendo pero del tipo de objeto que yo estoy introduciendo. 11 00:01:48,000 --> 00:02:00,000 Y que esto no está decidido a priori cuando yo creo la clase, sino que cuando uso la clase quiero especificar esta bolsa que puede contener. 12 00:02:01,000 --> 00:02:20,000 Eso en Java es una clase genérica, es decir que yo en vez de decirme, mira este atributo aquí tiene un tipo String, pues le voy a dar un tipo genérico que luego cuando tú utilizarás esta clase me dirás que tipo es. 13 00:02:21,000 --> 00:02:37,000 Entonces para utilizar un tipo genérico de este tipo, cuando yo declaro la clase aquí le pongo que esta clase se basa sobre un tipo genérico. 14 00:02:37,000 --> 00:02:45,000 Normalmente para indicar un tipo genérico se utiliza una letra, y esta letra representa algo. 15 00:02:45,000 --> 00:02:48,000 En realidad puedes utilizar lo que te da la gana, es un identificador. 16 00:02:48,000 --> 00:02:58,000 Pero normalmente es una letra sola, por convención T estaría como tipo, o V podría ser como valor, o puedes usar lo que te da la gana. 17 00:02:58,000 --> 00:03:02,000 Normalmente nosotros utilizamos T, no es obligatorio utilizar T. 18 00:03:02,000 --> 00:03:11,000 Esto quiere decir que cuando crearé una clase genérica le tendré que especificar que tipo de objetos huye a esta clase genérica. 19 00:03:12,000 --> 00:03:26,000 Y luego que puedo hacer, por ejemplo puedo decir, y tú tendrás un atributo 1, este T será el tipo que yo voy a utilizar. 20 00:03:26,000 --> 00:03:35,000 Si aquí le digo que quiero hacer una clase genérica con tipo genérico String, pues automáticamente este atributo será un String. 21 00:03:35,000 --> 00:03:43,000 Si yo le digo un coche, pues esto será un coche. Si yo le digo cocodrilo, pues esto será cocodrilo. 22 00:03:43,000 --> 00:03:50,000 Y es un tipo genérico, yo ahora mismo mientras estoy haciendo la clase no lo sé que tipo es. 23 00:03:50,000 --> 00:04:01,000 Cuando ahora en el Main me creo una clase genérica, pues le tendré que decir de qué quiero, y por lo tanto en automático este de aquí será un String. 24 00:04:01,000 --> 00:04:03,000 O será un lo que sea. 25 00:04:03,000 --> 00:04:08,000 Tengámoslo así sencillo. 26 00:04:08,000 --> 00:04:11,000 Quiero crear una clase genérica. 27 00:04:11,000 --> 00:04:22,000 Una clase genérica X es igual a new una clase genérica. 28 00:04:23,000 --> 00:04:30,000 Esto sería un constructor normal y corriente de siempre. 29 00:04:30,000 --> 00:04:37,000 Ahora le tendría que definir, si quiero, si no quiero posiblemente esto sería un Object. 30 00:04:37,000 --> 00:04:45,000 Le puedo definir qué tipo de clase genérica quiero utilizar. 31 00:04:46,000 --> 00:04:48,000 Definir esta cosa aquí. 32 00:04:48,000 --> 00:04:50,000 Entonces la puedo definir aquí. 33 00:04:54,000 --> 00:05:02,000 Cuando yo defino así, pues le estoy diciendo que el tipo que voy a utilizar aquí sería un String. 34 00:05:02,000 --> 00:05:10,000 Por lo tanto, como aquí dentro yo utilizo un atributo T, pues este atributo de aquí será un String. 35 00:05:11,000 --> 00:05:30,000 Y esto quiere decir que ahora si yo acedo a X.atrib1, como veis que para él es un String. 36 00:05:31,000 --> 00:05:40,000 Si yo le dijera, no, mira, quiero hacer una clase genérica que dentro tiene objetos Scanner. 37 00:05:40,000 --> 00:05:44,000 Son otros objetos que nosotros utilizamos. 38 00:05:44,000 --> 00:05:53,000 Ahora cuando yo voy a mirar X.atrib1, para él ahora es un Scanner. 39 00:05:54,000 --> 00:06:01,000 Esto nos viene principalmente útil ahora cuando haremos las colecciones. 40 00:06:01,000 --> 00:06:06,000 Porque yo cuando creo una colección, tengo una colección que es una lista de objetos. 41 00:06:06,000 --> 00:06:08,000 Sí, pero ¿qué objetos quieres ahí? 42 00:06:08,000 --> 00:06:14,000 Entonces puedo hacer una lista de personas, puedo hacer una lista de String, puedo hacer una lista de Scanner, 43 00:06:14,000 --> 00:06:17,000 puedo hacer una lista de cualquier objeto que yo identifique ahí. 44 00:06:18,000 --> 00:06:25,000 La lista en general será un objeto general, será con un tipo genérico. 45 00:06:27,000 --> 00:06:34,000 Pero si yo he hecho una lista donde puedo añadir objetos, le diré que puedes añadir objetos de tipo T. 46 00:06:34,000 --> 00:06:38,000 Y si luego he hecho una lista de String, podrás añadir String. 47 00:06:38,000 --> 00:06:45,000 Si le digo que has hecho una lista de coches, podrás añadir objetos de tipo coche. 48 00:06:46,000 --> 00:06:52,000 Es como una abstracción, una generalización de lo que hay ahí dentro. 49 00:06:52,000 --> 00:07:00,000 Y esto más o menos se indica aquí y luego se utiliza el tipo allá donde quieras. 50 00:07:00,000 --> 00:07:05,000 Puedo crear un Array de objetos T. 51 00:07:08,000 --> 00:07:15,000 Array conjunto de T. 52 00:07:17,000 --> 00:07:22,000 Claramente cuando yo creo esto, pues esto tendrá más sentido. 53 00:07:22,000 --> 00:07:27,000 Esto yo estoy enseñando más bien la sintaxis, el utilizo de esto. 54 00:07:27,000 --> 00:07:33,000 Pero no estoy haciendo nada de eso, no lo estoy identificando ni nada. 55 00:07:33,000 --> 00:07:49,000 Entonces, cuando yo he hecho esta cosa aquí de Scanner, si yo ahora hago x.conjunto de T, veis que es un Array de Scanner. 56 00:07:52,000 --> 00:08:00,000 La idea es que donde yo haya utilizado T, ahora es lo que yo le he pasado aquí al momento de crear. 57 00:08:02,000 --> 00:08:15,000 Y que yo pueda crear un public void método1 que pille como parámetros un T. 58 00:08:15,000 --> 00:08:17,000 Un parámetro. 59 00:08:19,000 --> 00:08:29,000 Y ahora sé que este método de aquí, cuando le tendré que pasar un parámetro, y este parámetro es de tipo el tipo que tú has seleccionado al momento de crear. 60 00:08:29,000 --> 00:08:33,000 Si tú le has dado aquí String, pues este será método1 que pille un String. 61 00:08:33,000 --> 00:08:39,000 Si te has puesto aquí coche, pues será que cuando tú lo haces aquí tendrás que pasarle como parámetro coche. 62 00:08:39,000 --> 00:08:48,000 Y yo por ejemplo aquí podría hacer un param.toString y él utilizará el toString de la clase al que pertenece cuando será creado. 63 00:08:49,000 --> 00:08:51,000 ¿Dudas? 64 00:09:00,000 --> 00:09:12,000 Tengo un objeto, creo un constructor, por ejemplo aquí, y voy a crear un objeto nuevo. 65 00:09:13,000 --> 00:09:17,000 Y cuidado, por ejemplo, aquí tengo pequeños problemas, ¿vale? 66 00:09:17,000 --> 00:09:28,000 Porque claro, cuando yo tengo que crear un objeto y tengo que instanciar este señor, yo no puedo, no sé qué objeto es. 67 00:09:28,000 --> 00:09:30,000 Lo que no puede hacer es un mute. 68 00:09:31,000 --> 00:09:32,000 ¿Vale? 69 00:09:32,000 --> 00:09:40,000 Porque si yo intento hacer esto, él se enfada. 70 00:09:40,000 --> 00:09:45,000 Dice, oye mira, no puedo instanciar el tipo T porque no sé qué tipo es el T. 71 00:09:45,000 --> 00:09:47,000 Y no existe. 72 00:09:47,000 --> 00:09:48,000 ¿Vale? 73 00:09:48,000 --> 00:09:51,000 Entonces una opción que puede hacer es esta de aquí. 74 00:09:51,000 --> 00:09:55,000 Digo, mira, yo te creo un nuevo objeto y este objeto lo castigo a T. 75 00:09:55,000 --> 00:09:57,000 Pero cuidado, este es muy peligroso. 76 00:09:57,000 --> 00:09:59,000 ¿Por qué es peligroso esto? 77 00:10:01,000 --> 00:10:05,000 Porque afectaría a cualquier tipo de T. 78 00:10:06,000 --> 00:10:09,000 Porque tecnicamente yo estoy creando un objeto. 79 00:10:09,000 --> 00:10:12,000 Un objeto genérico. 80 00:10:12,000 --> 00:10:13,000 No estoy creando nada de T. 81 00:10:13,000 --> 00:10:15,000 Y luego te estoy diciendo si es un T. 82 00:10:15,000 --> 00:10:17,000 Pero no estoy usando el constructor de T. 83 00:10:17,000 --> 00:10:21,000 Entonces este de aquí tiene muchas probabilidades que explote. 84 00:10:21,000 --> 00:10:22,000 ¿Vale? 85 00:10:22,000 --> 00:10:24,000 Esta cosa aquí no me gusta mucho. 86 00:10:24,000 --> 00:10:28,000 Lo más probable, lo más interesante sería, vale, pásamelo aquí. 87 00:10:28,000 --> 00:10:30,000 Pásame un objeto de aquí. 88 00:10:30,000 --> 00:10:34,000 Y yo lo que hago es ponértelo aquí dentro. 89 00:10:36,000 --> 00:10:39,000 Entonces a la hora de utilizarlo. 90 00:10:39,000 --> 00:10:44,000 Cuando tú vas a identificar que este de aquí es de tipo string. 91 00:10:44,000 --> 00:10:48,000 Cuando tú me crearás un objeto me pasarás aquí un string. 92 00:10:48,000 --> 00:10:49,000 ¿Vale? 93 00:10:49,000 --> 00:10:51,000 Que se corresponderá a eso. 94 00:10:51,000 --> 00:10:54,000 Entonces esto ya lo guardaré como string. 95 00:10:54,000 --> 00:10:58,000 Si yo aquí te he puesto que es de coches. 96 00:10:58,000 --> 00:11:01,000 Pues entonces al crearlo aquí te paso un coche. 97 00:11:01,000 --> 00:11:03,000 Y tú pondrás un coche aquí dentro. 98 00:11:03,000 --> 00:11:04,000 ¿Sí? 99 00:11:04,000 --> 00:11:07,000 Otra opción es dejar esto vacío. 100 00:11:07,000 --> 00:11:09,000 O sea, sin nada. 101 00:11:11,000 --> 00:11:13,000 Y luego utilizar setter y getter. 102 00:11:13,000 --> 00:11:14,000 ¿Vale? 103 00:11:14,000 --> 00:11:15,000 Y hacérmelo yo. 104 00:11:15,000 --> 00:11:19,000 Yo me creo siempre un objeto de clase genérica vacío. 105 00:11:19,000 --> 00:11:27,000 Y luego después voy añadiendo objetos con los métodos que se basan sobre el tipo genérico. 106 00:11:27,000 --> 00:11:30,000 Y por lo tanto funcionará. 107 00:11:36,000 --> 00:11:39,000 Entonces este de aquí no me da errores. 108 00:11:39,000 --> 00:11:40,000 ¿Vale? 109 00:11:40,000 --> 00:11:43,000 Porque al fin y al cabo yo puedo guardar aquí un objeto. 110 00:11:43,000 --> 00:11:47,000 Pero cuidado con el cast de esto porque podría enfadarse. 111 00:11:47,000 --> 00:11:48,000 ¿Sí? 112 00:11:49,000 --> 00:11:51,000 Aquí también mismo problema. 113 00:11:51,000 --> 00:11:52,000 ¿Vale? 114 00:11:52,000 --> 00:11:56,000 Estoy creando un objeto nuevo de tipo objeto. 115 00:11:56,000 --> 00:11:58,000 Y luego lo estoy casteando a t. 116 00:11:58,000 --> 00:12:00,000 Hay que ver si este t luego no se enfada. 117 00:12:00,000 --> 00:12:01,000 ¿Vale? 118 00:12:01,000 --> 00:12:02,000 Aquí... 119 00:12:04,000 --> 00:12:05,000 Da un error. 120 00:12:11,000 --> 00:12:14,000 Ah, porque le he puesto esto. 121 00:12:15,000 --> 00:12:19,000 Aquí es un par de ejemplos de utilizo. 122 00:12:19,000 --> 00:12:20,000 ¿Vale? 123 00:12:20,000 --> 00:12:25,000 Entonces yo por ejemplo tengo un ejemplo clase genérica que es de tipo string. 124 00:12:25,000 --> 00:12:30,000 Por lo tanto esta es la variable que define esta referencia aquí. 125 00:12:30,000 --> 00:12:36,000 Y aquí lo que hago es un ejemplo clase genérica utilizando como tipo string. 126 00:12:36,000 --> 00:12:37,000 ¿Vale? 127 00:12:37,000 --> 00:12:43,000 Entonces aquí he fijado que esta t es en realidad un tipo string. 128 00:12:43,000 --> 00:12:44,000 ¿Vale? 129 00:12:44,000 --> 00:12:51,000 Entonces a este punto puedo acceder a un objeto, ponerle dentro y me lo acepta porque acepta strings. 130 00:12:51,000 --> 00:12:52,000 ¿Vale? 131 00:12:52,000 --> 00:12:59,000 O en una red de objetos genéricos en posición cero y ponerle un string porque esto es una red de string ahora. 132 00:13:00,000 --> 00:13:01,000 ¿Vale? 133 00:13:01,000 --> 00:13:05,000 Fijaos que puedo crearme otro objeto. 134 00:13:05,000 --> 00:13:08,000 Otro objeto de clase genérica. 135 00:13:08,000 --> 00:13:09,000 Es la misma clase. 136 00:13:09,000 --> 00:13:14,000 Pero ahora le digo que oye tú no contienes strings y no contienes personas. 137 00:13:14,000 --> 00:13:18,000 Entonces tu objeto t ahora está asociado con personas. 138 00:13:18,000 --> 00:13:23,000 Y entonces ahora dentro donde antes le ponía un string que me decía todo bien, 139 00:13:23,000 --> 00:13:25,000 ahora aquí le pongo una nueva persona. 140 00:13:27,000 --> 00:13:28,000 Y me dice ok. 141 00:13:28,000 --> 00:13:29,000 ¿Vale? 142 00:13:29,000 --> 00:13:35,000 Porque este objeto de aquí como clase genérica utiliza una persona y no un string. 143 00:13:36,000 --> 00:13:38,000 La idea de fondo se entiende. 144 00:13:38,000 --> 00:13:45,000 Es parametrizar en un cierto sentido un tipo sin ligarme a que esto tiene que ser un string y no puede ser otra cosa. 145 00:13:45,000 --> 00:13:47,000 Sino dejarlo libre. 146 00:13:47,000 --> 00:13:48,000 ¿Vale? 147 00:13:48,000 --> 00:13:51,000 A que yo pueda estanciar cuando lo necesito. 148 00:13:51,000 --> 00:13:53,000 Fijaos que no es que se estancia a tiempo de ejecución. 149 00:13:53,000 --> 00:13:55,000 Esto es siempre tiempo de compilación. 150 00:13:55,000 --> 00:13:56,000 ¿Vale? 151 00:13:56,000 --> 00:14:02,000 Mientras yo estoy codificando, mientras yo estoy programando pues decido que este objeto de aquí tiene personas. 152 00:14:02,000 --> 00:14:11,000 La idea es crear objetos, crear clases que sean suficientemente genéricas para que puedan trabajar con distintos tipos de objetos. 153 00:14:11,000 --> 00:14:12,000 ¿Vale? 154 00:14:12,000 --> 00:14:19,000 Donde esto se usa en varias cosas pero donde esto viene intuitivamente claro es cuando ahora, y lo veremos en un minuto, 155 00:14:19,000 --> 00:14:22,000 pues vamos a utilizar colecciones. 156 00:14:22,000 --> 00:14:23,000 ¿Vale? 157 00:14:23,000 --> 00:14:27,000 Pensar de un array en un cierto sentido. 158 00:14:28,000 --> 00:14:35,000 Con un array ya lo estamos utilizando esto porque tú puedes hacer un array de string o un array de enteros o un array de personas. 159 00:14:35,000 --> 00:14:40,000 El concepto de array es siempre el mismo, como utilizáis el array, como accedes a cada una. 160 00:14:40,000 --> 00:14:45,000 Es siempre lo mismo pero el tipo de datos que estáis almacenando pues varia. 161 00:14:45,000 --> 00:14:51,000 En vez de utilizar los arrays que es una cosa que Java me proporciona directamente, 162 00:14:51,000 --> 00:15:01,000 lo que estoy haciendo es creándome mi propia clase, mi propio objeto que trabaje como yo quiero que trabaje, 163 00:15:01,000 --> 00:15:07,000 pero no me fijo en un determinado tipo que es el que trabaje sino lo dejo libre para que tú puedas utilizarlo cuando te vayas. 164 00:15:07,000 --> 00:15:15,000 Si yo creo un objeto colección, es lo que decíamos antes de los arrays tienen el problema que tienen un tamaño fijo. 165 00:15:15,000 --> 00:15:23,000 Si ahora quiero salirme de ese problema y decir quiero crearme una clase que oculte lo que haya debajo, 166 00:15:23,000 --> 00:15:29,000 si es un array, si es otra forma de hacer las cosas, pero quiero que más o menos sea una colección de datos, 167 00:15:29,000 --> 00:15:32,000 que yo pueda almacenar allí dentro datos. 168 00:15:32,000 --> 00:15:34,000 Si tengo una nueva persona pues la almaceno allí dentro. 169 00:15:34,000 --> 00:15:36,000 Si tengo 39 personas la almaceno allí dentro. 170 00:15:36,000 --> 00:15:43,000 Y sigo adelante así y puedo buscar y puedo hacer cosas con esta clase. 171 00:15:43,000 --> 00:15:47,000 Pero no quiero que esta colección sea solo de string. 172 00:15:47,000 --> 00:15:54,000 No quiero hacer 37 veces la colección de string, colección de personas, colección de objetos, colección de... 173 00:15:54,000 --> 00:15:59,000 porque cada vez que hay un objeto nuevo si no debería estar otra vez a crearme una nueva colección, 174 00:15:59,000 --> 00:16:02,000 una nueva clase colección de el nuevo objeto que he creado. 175 00:16:02,000 --> 00:16:09,000 Entonces la quiero hacer más abstracta, tener una colección de no sé qué, de clases genéricas, de tests. 176 00:16:10,000 --> 00:16:17,000 Y luego sea la persona que lo va a utilizar que implemente que esta vez lo quiero hacer un array de aeropuertos. 177 00:16:23,000 --> 00:16:26,000 Entonces esta es un poquito la idea de clase genérica. 178 00:16:26,000 --> 00:16:31,000 Ahora la vamos a aplicar en lo que vamos a ver a continuación. 179 00:16:32,000 --> 00:16:35,000 A continuación lo que vamos a hacer es esto. 180 00:16:35,000 --> 00:16:39,000 Os he preparado una interfaz. 181 00:16:39,000 --> 00:16:42,000 Que es la interfaz MyCollection. 182 00:16:42,000 --> 00:16:46,000 La interfaz MyCollection de un tipo genérico. 183 00:16:47,000 --> 00:16:58,000 La idea es que yo pueda crear objetos, digamos, clases que implementen esta interfaz 184 00:16:58,000 --> 00:17:05,000 y que para implementar esta interfaz tengan que implementar estos métodos. 185 00:17:05,000 --> 00:17:08,000 La idea es la que decíamos antes. 186 00:17:08,000 --> 00:17:13,000 Es decir, yo hasta ahora cuando tenía que almacenar un conjunto de objetos 187 00:17:13,000 --> 00:17:17,000 lo que podía hacer y lo que hacía era utilizar un array. 188 00:17:17,000 --> 00:17:21,000 Entonces yo me creaba un array de 10 posiciones, empezaba a meter personas allí 189 00:17:21,000 --> 00:17:26,000 y teníamos estos problemas de que hago cuando llego a que está lleno mi array 190 00:17:26,000 --> 00:17:28,000 y tengo que añadir una persona nueva. 191 00:17:28,000 --> 00:17:31,000 Y aquí había varias opciones que hemos visto. 192 00:17:31,000 --> 00:17:33,000 Es decir, puedo añadir de uno en uno. 193 00:17:33,000 --> 00:17:39,000 Tenía 10 posiciones, pues ahora pongo un array de 11 posiciones, copio las primeras 10 194 00:17:39,000 --> 00:17:41,000 y en la última pongo la persona nueva. 195 00:17:41,000 --> 00:17:46,000 Tenía la posibilidad de doblar, es decir, cuando 10 ya no son suficientes 196 00:17:46,000 --> 00:17:49,000 pues creo un nuevo array pero lo creo de 20. 197 00:17:50,000 --> 00:17:54,000 Y eso me permite añadir la siguiente y hasta 9 más. 198 00:17:54,000 --> 00:17:57,000 Cuando ya no está aquí pues lo doblo otra vez y ya tengo 40. 199 00:17:57,000 --> 00:17:59,000 ¿Qué ventaja tenía esto? 200 00:17:59,000 --> 00:18:02,000 Que perdía menos tiempo en copiar. 201 00:18:02,000 --> 00:18:06,000 Porque cada vez que copio el array pues estoy perdiendo tiempo para nada. 202 00:18:06,000 --> 00:18:11,000 Estoy sustancialmente haciendo una operación de copia de todas las referencias de los objetos 203 00:18:11,000 --> 00:18:13,000 pero no me sirve de nada. 204 00:18:13,000 --> 00:18:15,000 No me está aportando nada. 205 00:18:15,000 --> 00:18:20,000 Es simplemente porque lo necesito por problemas técnicos de no tengo más espacio. 206 00:18:20,000 --> 00:18:24,000 Entonces, quiero olvidarme de eso. 207 00:18:24,000 --> 00:18:32,000 Quiero extraer eso y simplemente crear una colección donde yo le digo 208 00:18:32,000 --> 00:18:37,000 añade un objeto y que sea él por debajo el que hace ese trabajo. 209 00:18:37,000 --> 00:18:41,000 A partir de que yo haya hecho mi classes, mi collection, 210 00:18:42,000 --> 00:18:47,000 pues no tengo que volver a preocuparme de cómo se hace eso de los arrays por debajo. 211 00:18:47,000 --> 00:18:52,000 Yo lo que hago es le digo añádeme este objeto y él según la implementación que haya hecho yo 212 00:18:52,000 --> 00:18:54,000 hará lo que tiene que hacer. 213 00:18:54,000 --> 00:18:58,000 Y así con todas las otras funciones. 214 00:18:58,000 --> 00:19:03,000 Si os fijáis, estas son funciones para manejo de colecciones de objetos. 215 00:19:03,000 --> 00:19:07,000 Puedo añadir un objeto, puedo saber cuánta es grande la colección actual, 216 00:19:07,000 --> 00:19:10,000 es decir, cuántos objetos tengo almacenados ahora. 217 00:19:10,000 --> 00:19:12,000 Puedo decir vaciar a toda. 218 00:19:12,000 --> 00:19:16,000 Puedo decir, oye, mira, esta colección contiene este objeto. 219 00:19:16,000 --> 00:19:21,000 O puedo pillar un objeto en un índice específico. 220 00:19:21,000 --> 00:19:25,000 Ahora ya veremos qué quiere decir esto cuando lo implementaremos. 221 00:19:25,000 --> 00:19:30,000 Puedo remover un objeto, es decir, búscame este objeto aquí y quítalo. 222 00:19:30,000 --> 00:19:34,000 O puedo hacer remuéveme el objeto en posición 7. 223 00:19:34,000 --> 00:19:42,000 Ahora la colección tendrá que contar 7 elementos, sea como sea el contar estos elementos. 224 00:19:42,000 --> 00:19:45,000 Y cuando llegue al elemento 7, pues eso lo borrará. 225 00:19:45,000 --> 00:19:52,000 O tu array, es decir, tú tienes una colección, ahora transfórmame en un array y dame este array. 226 00:19:52,000 --> 00:19:57,000 Porque a lo mejor luego a partir de aquí quiero hacer algo con este array y lo quiero borrar. 227 00:19:57,000 --> 00:20:01,000 Estas no son todas las operaciones que se podrían hacer sobre una colección. 228 00:20:01,000 --> 00:20:06,000 Luego veremos qué es la colección de Java, pero eso a posteriori. 229 00:20:06,000 --> 00:20:11,000 Mi idea es que ahora lo vamos a implementar nosotros, vamos a hacer nuestras colecciones. 230 00:20:11,000 --> 00:20:16,000 Y cuando ya hemos entendido qué quiere decir implementar una colección, 231 00:20:16,000 --> 00:20:20,000 qué quiere decir hacer estas cosas y que hay formas distintas de hacerlas 232 00:20:20,000 --> 00:20:23,000 y que me puedo inventar mis modos para hacer las mismas cosas. 233 00:20:23,000 --> 00:20:28,000 A ese punto vamos a ver qué nos proporciona Java. 234 00:20:28,000 --> 00:20:33,000 Que son las clases que existen ya en Java y que me permiten hacer esto 235 00:20:33,000 --> 00:20:37,000 de una forma posiblemente más optimizada, más segura, con menos problemas 236 00:20:37,000 --> 00:20:41,000 y sobre todo que yo no me pueda olvidar de tener que hacerlo cada vez. 237 00:20:41,000 --> 00:20:46,000 Porque ya están dentro del jr. 238 00:20:47,000 --> 00:20:58,000 De paso, vamos a repasar tanto gestión de array como otras cosillas un poquito más interesantes 239 00:20:58,000 --> 00:21:04,000 que veremos y esto de aquí, cada uno de estos métodos, al fin y al cabo 240 00:21:04,000 --> 00:21:08,000 será un pequeño algoritmo que tengo que implementar. 241 00:21:08,000 --> 00:21:12,000 Por lo tanto nos viene bien a nosotros porque son ejercicios mirados 242 00:21:12,000 --> 00:21:17,000 como eso de pillar un array y aumentarlo o cosa por eso.