20260202 Colecciones_1 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Bueno, pues vamos a avanzar un poquito
00:00:00
y vamos a introducir las colecciones, ¿vale?
00:00:05
Porque ya nos las está pidiendo el cuerpo.
00:00:17
Ya estamos hartos de los Arrays.
00:00:19
Porque son un rollo, los Arrays, realmente.
00:00:23
¿Vale?
00:00:27
¿Para qué hemos usado los Arrays?
00:00:30
Han sido imprescindibles
00:00:32
cuando necesitábamos guardar muchos datos
00:00:33
del mismo tipo
00:00:37
del mismo tipo
00:00:38
o de la misma superclase
00:00:40
todos ellos, ¿vale?
00:00:43
en ambos casos los podíamos guardar en el mismo array
00:00:44
ese array se queda
00:00:46
declarado como la superclase
00:00:47
y ya está, ¿vale?
00:00:51
entonces, ha sido imprescindible
00:00:55
si yo quiero guardar
00:00:56
un montón de empleados
00:00:58
un montón de ellos
00:01:00
10, 100
00:01:03
no puedo guardarlos en variables independientes
00:01:04
podría, por supuesto
00:01:07
pero ¿cuántas variables hago? 100
00:01:08
y si luego aparece uno, me meto en el código
00:01:10
y hago una variable más
00:01:12
cuando tenga luego que recoger los empleados
00:01:13
para procesarlos
00:01:16
como hago, son variables sueltas
00:01:19
obviamente, así no podíamos
00:01:20
trabajar
00:01:22
entonces cuando teníamos que usar un montón
00:01:23
de datos del mismo tipo
00:01:27
o de la misma super clase
00:01:28
o de la misma super clase
00:01:30
pues usábamos el array
00:01:32
y esa estructura es una estructura imprescindible
00:01:33
para poder hacer cualquier programa de programación estructurada
00:01:37
y está en todos los lenguajes de programación estructurados
00:01:41
ya sabemos cómo se maneja y todo eso
00:01:43
y también sabemos que es un poco rollo
00:01:46
porque cuando uno la declara
00:01:50
tiene que comprometerse a definir un tamaño
00:01:52
uno, no hay otra
00:02:00
porque así funcionan los arrays
00:02:04
Entonces, si yo pongo 10 en el momento de instanciar ese objeto Array, si yo pongo 10, esto se ha convertido en un Array de 10 posiciones y así va a ser para siempre.
00:02:06
Entonces, una vez construido, es una estructura muy rápida de acceder. Yo accedo por su índice 0, 1, 2 y el acceso es muy rápido. Doy el índice y accedo.
00:02:23
Pero, que quiero incorporar un dato nuevo que me ha aparecido posteriormente, pues este array ya no me vale, es imposible. Tenemos que hacer otro y no hay otra. Es así sí o sí.
00:02:37
a ese otro moveré
00:02:51
a ese otro moveré
00:02:54
moveré lo viejo
00:03:07
añadiré lo nuevo
00:03:13
y este se va a la basura porque no hay otra
00:03:17
y la referencia antigua
00:03:20
ahora empieza a apuntar a esto
00:03:22
y no hay otra manera de trabajar con Arrays
00:03:24
¿vale? entonces en realidad
00:03:26
no es un problema
00:03:28
no es un problema, lo que pasa es que a nivel de código
00:03:30
a nivel de escritura de código es un rollo
00:03:33
porque a nivel de escritura de código tenemos que hacer todo esto
00:03:36
que hemos hecho mil veces, crear el array nuevo
00:03:39
con las nuevas posiciones, más posiciones
00:03:42
o menos posiciones, depende de si queremos
00:03:46
insertar o eliminar, hacer las copias
00:03:48
que procedan y luego ya sustituir
00:03:52
la referencia que apuntaba aquí, sustituirla por esta
00:03:55
Entonces este, el viejo
00:03:58
Ya sabemos que entonces se queda
00:04:00
Desapuntado
00:04:03
Ahí ya nadie le quiere
00:04:05
No hay manera de acceder a él
00:04:07
No pasa nada, durante unos milisegundos
00:04:09
No más
00:04:12
Se va a quedar ahí en memoria, ocupando memoria
00:04:12
Durante unos milisegundos
00:04:15
Pero al cabo de ciertos milisegundos
00:04:16
El recolector de basura, pipipi
00:04:18
Ese proceso demonio, pues despierta
00:04:20
Y dice, uy, aquí hay algo en memoria
00:04:22
Que no tiene ni una sola referencia
00:04:25
en el código, en el proceso, ni una
00:04:27
pues hala, fuera
00:04:30
y lo quita
00:04:32
¿vale?
00:04:33
sí, puedes
00:04:36
¿vale?
00:04:37
bueno, pues entonces
00:04:44
nos es pesado trabajar con Arrays
00:04:45
a nivel de escritura de código
00:04:47
esa es la conclusión, nos es pesado
00:04:50
porque tenemos que hacer todo el rato
00:04:51
esa creación nueva
00:04:53
copiado y eliminado
00:04:54
entonces, ¿qué
00:04:56
soluciones podemos adoptar
00:04:59
vale, pues vamos a
00:05:02
encerrar esta complejidad
00:05:05
en un objeto
00:05:07
que me ofrezca métodos
00:05:08
que ya me lo haga
00:05:10
pero que me haga eso, porque es que no hay otra que me lo haga
00:05:12
voy a encerrar esto en una clase
00:05:15
en una clase
00:05:17
que me ofrezca
00:05:19
métodos para hacer estas cosas
00:05:21
y que ya lo haga
00:05:23
esa clase por dentro
00:05:24
entonces yo llamo a esa clase
00:05:26
llamo a esos métodos
00:05:27
y ya está. Lo que está ocurriendo
00:05:29
en Java por dentro es lo mismo.
00:05:31
Pero al meter yo esto en una clase
00:05:34
encerradita, con unos
00:05:36
métodos, puedo usar esa clase
00:05:37
llámala los métodos y a nivel de escritura
00:05:39
de código es más sencillo.
00:05:41
Vale, pues esa clase, ¿cuál es?
00:05:44
Es la famosa
00:05:47
clase ArrayList que tanto os gusta.
00:05:47
¿Vale? Entonces,
00:05:55
¿qué es una ArrayList? Primer
00:05:57
ejemplo de colecciones. Primer ejemplo.
00:05:59
Para que entendamos la idea,
00:06:01
los colecciones no es que sea algo
00:06:02
nuevo, no, no hay nada nuevo
00:06:04
todo lo que hay en Java
00:06:06
todo, ya lo conocemos
00:06:08
porque solamente hay variables
00:06:10
primitivas y arrays
00:06:12
no hay más
00:06:14
y sentencias de control como
00:06:15
if, for, while, switch
00:06:18
ya está, no hay más, todo lo que hay
00:06:20
a partir de ahí es meter esas cosas
00:06:22
en clases
00:06:24
para usarlas nosotros
00:06:25
muchas de esas clases
00:06:27
lógicamente se distribuyen
00:06:30
en la librería que acompaña a la máquina
00:06:32
virtual, la que nosotros llamamos la JRE
00:06:34
ahí sabemos que hay como 2.000 millones de clases
00:06:36
¿vale?
00:06:38
pues como Scanner
00:06:40
como System.out, como un montón
00:06:41
de clases, pues todas esas clases
00:06:44
tienen dentro lo único que se puede
00:06:46
hacer, que es
00:06:48
combinación de variables primitivas
00:06:50
Arrays y sentencias de control como
00:06:52
EFIFOR, no hay más
00:06:54
entonces aparte de las clases que ya
00:06:55
vienen incorporadas en la máquina
00:06:58
virtual a las que yo llamo
00:07:00
desde mi programa
00:07:02
uno se hace ya sus propias clases
00:07:03
para crearse datos más complejos
00:07:06
datos objetos
00:07:08
¿vale? datos objetos
00:07:09
y no hay más que eso
00:07:10
bueno, pues las colecciones son eso
00:07:12
clases que ya están hechas
00:07:15
que podríamos hacer nosotros
00:07:18
y alguna la vamos a hacer ahora
00:07:20
podríamos hacer nosotros
00:07:22
clases que ya están hechas
00:07:23
que ocultan
00:07:25
encapsulan dentro de ellas
00:07:28
una forma de guardar objetos
00:07:31
que yo puedo usar desde fuera
00:07:33
y por tanto me olvido de la complejidad
00:07:36
de cómo están almacenados
00:07:39
yo me limito a una caja
00:07:40
mete en la caja, saca, recorre
00:07:43
¿vale? esas son las colecciones
00:07:45
las colecciones son como si fueran
00:07:46
cajas
00:07:49
para meter datos
00:07:50
es decir, en realidad
00:07:54
como si fuera un array, un array es eso, una caja para meter datos
00:08:01
pero las colecciones
00:08:04
me envuelven toda esa complejidad
00:08:06
me la encierran dentro y me ofrecen unos
00:08:08
métodos para que yo llamando
00:08:10
a los métodos se hagan esas
00:08:12
cosas sin que yo las tenga
00:08:14
que hacer directamente por código
00:08:16
ya está, simplemente eso, sin que yo
00:08:18
las tenga que hacer por código, nada más
00:08:20
bueno, pues cajitas de estas
00:08:21
es decir, colecciones, clases de estas
00:08:24
que envuelven esa complejidad de meter
00:08:26
cosas en las cajas y sacarlas
00:08:28
hay muchas
00:08:30
muchas posibilidades
00:08:32
en función de qué tipo de almacenamiento me interese a mí
00:08:34
o qué tipo de uso voy a hacer yo de ese almacenamiento.
00:08:38
Hay muchas posibilidades, ¿vale?
00:08:41
Ahora las vamos a ver en detalle.
00:08:44
Ahora las vamos a ver en detalle.
00:08:45
Pero antes de nada, para motivar un poquito
00:08:47
de dónde sale todo esto,
00:08:49
vamos a ver, hemos puesto el ejemplo del ArrayList, ¿vale?
00:08:52
Entonces, ¿qué es un ArrayList?
00:08:56
Un ArrayList es una clase que ya está hecha en Java,
00:08:58
pero que podríamos hacer nosotros perfectamente.
00:09:01
que me envuelve la complejidad
00:09:04
de meter cosas en el array y sacarlas
00:09:06
eso es un ArrayList, no es más que eso
00:09:08
entonces si nosotros hiciéramos un
00:09:10
ArrayList nuestro
00:09:14
pues porque se nos podría haber ocurrido a nosotros
00:09:15
en lugar de usar el ArrayList que ya viene en Java
00:09:26
se nos podría haber ocurrido
00:09:28
jolines, cada vez que meto en un Array
00:09:30
estoy todo el rato repitiendo
00:09:32
el mismo código, que es
00:09:34
crea array auxiliar con una posición más
00:09:36
copia, añade el nuevo
00:09:38
elimina el anterior y sustituye
00:09:41
Cada vez que estoy eliminando de una vez es lo mismo, crear uno con una posición menos, copia saltándote el de eliminar, estoy haciendo eso todo el rato. Otro principio de desarrollo es no repetirse, no te repitas, no te repitas, no te repitas, si lo puedes evitar no te repitas, ¿vale?
00:09:43
bueno, pues se nos podría
00:10:01
haber ocurrido, se nos podría haber ocurrido
00:10:04
y decir, jolines, me voy a hacer yo una clase
00:10:06
que pueda usar
00:10:09
siempre que quiera usar un array
00:10:10
y que esa clase tenga métodos
00:10:12
dentro para encerrar esa complejidad
00:10:15
de insertar en el array
00:10:17
y sacar del array, y así no tengo que repetirme
00:10:18
todo el rato con el mismo código
00:10:20
¿vale? se nos podría haber ocurrido
00:10:22
hacer esa clase a nosotros
00:10:24
lo que pasa es que, bueno, que ya está hecha, es el array list
00:10:26
si se nos hubiera ocurrido
00:10:28
hacer esa clase a nosotros
00:10:30
pues podríamos haber hecho por ejemplo esta clase
00:10:31
¿vale? esta clase que está pensada
00:10:34
para ser una cajita
00:10:36
una cajita con datos
00:10:37
y además con la
00:10:40
posibilidad de tener un comportamiento
00:10:42
del tipo pues meter
00:10:44
sacar
00:10:46
o sea consultar
00:10:49
eliminar
00:10:52
a ver
00:10:53
se me ha roto el roto
00:10:58
bueno pues si se nos hubiera ocurrido hacer a nosotros
00:10:59
esa caja
00:11:14
que habríamos dicho, vale
00:11:15
los objetos
00:11:17
miArrayList, los objetos
00:11:20
cada vez que yo instancie
00:11:22
un objeto miArrayList
00:11:23
es decir, cada vez que hagamos
00:11:25
esto en mi código
00:11:28
cada vez que yo instancie
00:11:28
un objeto miArrayList
00:11:31
cada vez que yo lo instancie
00:11:33
lo que querré que se cree
00:11:36
lo que querré
00:11:39
que se cree, lo he dicho bien
00:11:41
lo que querré crear
00:11:42
es una caja para meter datos
00:11:44
eso es lo que querré crear
00:11:47
cuando instancio mi ArrayList
00:11:49
vale
00:11:51
pues para que este objeto
00:11:51
me sirva para meter muchos datos
00:11:54
tendrá que tener
00:11:57
dentro una propiedad
00:11:59
que lo permita
00:12:01
pues mi ArrayList no le queda más remedio
00:12:02
que tener dentro una propiedad
00:12:05
Array
00:12:07
porque ese es el objeto mi ArrayList
00:12:07
el objeto mi ArrayList es un objeto
00:12:10
que me tiene que servir
00:12:12
para guardar dentro un montón de cosas.
00:12:13
Para guardar dentro un montón de cosas.
00:12:16
Vale, pues tendrá que tener aquí un array de cositas.
00:12:18
¿Vale?
00:12:28
Entonces, ah, nos vendía la primera pregunta,
00:12:28
que es, pero espérate, yo cuando declaro un array
00:12:30
tengo que poner aquí siempre el tipo de dato,
00:12:34
siempre, lógicamente.
00:12:36
Entonces, este mi array list no me va a valer
00:12:38
para cualquier tipo de dato,
00:12:43
porque yo aquí si pongo string
00:12:45
solo me va a valer para una caja
00:12:47
de muchos string, si pongo int
00:12:49
solo me va a valer para una caja
00:12:51
de muchos int
00:12:52
pues sí, efectivamente, no hay otra
00:12:54
tendríamos que dar el salto
00:12:57
a genérico
00:12:59
que lo daremos más tarde
00:13:00
para que esto me valga para todo
00:13:03
pero ese salto a genérico no es trivial tampoco
00:13:04
bueno, vamos a suponer que
00:13:07
nosotros queremos hacernos
00:13:09
nuestra propia colección
00:13:11
para guardar solamente
00:13:12
cadenas, por ejemplo, cadenas
00:13:15
porque todavía no sabemos dar el salto genérico
00:13:16
cadenas, pues entonces nos haríamos
00:13:18
nuestra clase miArrayList
00:13:21
y esto, y aquí
00:13:22
pondríamos el string
00:13:24
¿vale?
00:13:25
bueno, pues cada vez
00:13:32
que yo instancie un objeto miArrayList
00:13:34
estoy instanciando una cajita
00:13:36
para guardar string
00:13:38
o sea, este objeto miArrayList
00:13:39
está encapsulando dentro del array
00:13:41
Lo está ocultando dentro, ¿vale?
00:13:43
Lo que hay dentro de esta cajita en realidad es un array
00:13:44
¿Vale? Eso es lo que habría ahí
00:13:47
Un array de cosas, ¿vale?
00:13:49
Pero para que este objeto me sirva para algo
00:13:51
Este objeto que yo he creado
00:13:53
El objeto new myArrayList
00:13:54
Cuando yo le instancie mi programa
00:13:55
Que lo llamaré como sea
00:13:57
Pues yo que sea, como sea
00:13:59
Pues tiene que ofrecerme
00:14:00
Un comportamiento, es decir, me tiene que ofrecer
00:14:02
La posibilidad de meter dentro
00:14:05
Sacar, etcétera
00:14:07
Bueno, pues, declaremos esos métodos
00:14:09
por ejemplo,
00:14:12
¿qué método básico querremos hacer?
00:14:14
Querremos hacer un método
00:14:17
que si yo le paso un elemento nuevo,
00:14:18
como string,
00:14:24
pues lo metan en el array.
00:14:29
Eso es lo que yo querré hacer en esa cajita
00:14:32
de mi ArrayList.
00:14:34
Un método que si yo le paso un elemento nuevo
00:14:35
lo metan en el array.
00:14:38
¿Vale?
00:14:39
Pues aquí es donde programaríamos
00:14:39
Toda esa cosa que ya hemos hecho mil veces de memoria
00:14:42
Sí
00:14:45
Lo que tienen los lunes y la lluvia
00:14:46
Pero claro
00:14:58
¿A qué habéis quedado?
00:15:00
¿A coger el coche?
00:15:02
¿A qué habéis quedado a coger el coche?
00:15:03
Todos nos habíamos separado
00:15:04
Venimos separados
00:15:05
Bueno
00:15:07
Vale, pues aquí es donde habría que hacer
00:15:10
toda esa complejidad y de envolverla
00:15:12
ahí, que aquí, pues, ¿qué haríamos?
00:15:15
Lo de siempre. Pues una
00:15:17
array aux
00:15:19
igual a new
00:15:20
stream
00:15:23
de len de datos
00:15:25
más uno.
00:15:27
Lo pongo así abreviado. Ahora,
00:15:31
copiar
00:15:33
datos en aux.
00:15:34
Añadir
00:15:40
el elemento e
00:15:41
Añadirlo al aux
00:15:44
En la posición libre
00:15:47
Ahora sustituir
00:15:48
Datos para que sea
00:15:51
Aux, es decir
00:15:53
Este código es el que meteríamos aquí
00:15:55
¿Vale? Este código es el que meteríamos aquí
00:15:56
¿Vale? Entonces una vez metido
00:15:58
Ahí ya ese código
00:16:01
Ahora yo ya en cualquier programa
00:16:02
Que a mí me dé la gana, cada vez que yo quiera
00:16:04
Trabajar con un montón de cadenas
00:16:07
Me hago un objeto new mi array list
00:16:08
Y ahora ya que quiero
00:16:11
meter una cadena nueva? Pues a
00:16:13
punto a
00:16:15
la cadena nueva que sea.
00:16:16
Y ya está.
00:16:20
Entonces, en
00:16:22
esa caja, mi ArrayList, estaré metiendo
00:16:23
la cadena nueva hola.
00:16:25
Entonces,
00:16:27
a través de un método a,
00:16:29
pues, me estoy
00:16:32
ahorrando todo lo que hemos estado haciendo a mano
00:16:33
todo el rato.
00:16:35
Claro, esta cajita
00:16:41
para ser más funcional
00:16:42
me tiene que permitir
00:16:43
recuperar el objeto en una posición
00:16:45
concreta, dame el objeto
00:16:48
que tienes en la posición 7
00:16:50
vale, también tendría
00:16:52
que tener ese método
00:16:54
vale
00:16:55
bueno, pues no pasa nada, podríamos hacerle
00:16:57
a este miArrayList
00:17:00
le podríamos hacer un método
00:17:01
que fuera
00:17:05
pues
00:17:08
delete y le pasamos
00:17:09
una posición
00:17:18
y ahora haríamos aquí todo el código
00:17:19
que ya sabemos hacer, todo el que ya sabemos
00:17:24
hacer que es, me creo
00:17:26
una array aux con una
00:17:28
posición menos
00:17:30
que la que tiene datos
00:17:31
copio todo lo de
00:17:34
datos en aux, saltándome
00:17:36
la posición esta
00:17:38
esta me la salto, una vez
00:17:40
que ya lo he hecho, sustituyo datos
00:17:42
por aux, lo que hemos hecho siempre
00:17:44
me estoy saltando todas las validaciones
00:17:46
claro, para que esto fuera más potente
00:17:48
pues me estoy saltando
00:17:50
las validaciones de
00:17:52
verificar que la posición
00:17:53
esté comprendida entre
00:17:56
cero y datos.led
00:17:58
menos uno, ¿vale?
00:18:00
Porque si no, pues este no te puede devolver
00:18:02
nada, ¿vale? Pero bueno, estoy
00:18:04
hablando en general más que
00:18:05
del código en particular
00:18:08
de la filosofía de las colecciones,
00:18:09
de qué son, eso es lo que me importa,
00:18:12
¿vale? Luego este código
00:18:14
pues habría que hacerlo más en detalle, claro,
00:18:15
¿vale? Bueno, pues una vez que yo
00:18:18
he metido ahí ese código,
00:18:20
que sabemos hacerlo perfectamente, lo hemos hecho mil veces
00:18:21
y se basa en lo de toda la vida
00:18:24
los if, los for y los arrays
00:18:25
pues que ahora yo en mi objeto
00:18:27
mi array list que me he creado para guardar cadenas
00:18:29
quiero eliminar la cadera
00:18:32
de posición 7
00:18:33
pues a punto delete
00:18:34
7
00:18:37
y ya está
00:18:38
y así podría hacer
00:18:40
incorporar aquí todos los métodos
00:18:43
para hacer lo que a mi me parezca
00:18:45
que es útil con una
00:18:47
colección de datos, con una caja de datos
00:18:49
que viene a ser añadir, eliminar, que te devuelva elemento en una posición, que sería el get, por ejemplo, aquí tendría sentido hacer otro método, que sea este método, sería muy fácil de hacer, porque te devuelve directamente, este método sería return datos de post, vale, me estoy saltando validaciones,
00:18:51
el método, habría que hacerlo más
00:19:38
correcto, diciendo, a ver, pos
00:19:39
está comprendido entre 0
00:19:42
y datos.let menos 1, porque
00:19:44
si no lo está, pues no puedes
00:19:46
hacer esto directamente, porque te daría
00:19:48
un ArrayIndexAuronException,
00:19:50
pero bueno, son detalles de implementación
00:19:52
que sabréis hacer perfectamente.
00:19:54
¿Vale? Lo que me
00:19:57
importa ahora es que veáis lo que es
00:19:58
una colección. Una colección
00:20:00
es una clase que se declara
00:20:02
pensada para contener datos
00:20:04
y ofrecerme
00:20:06
formas de manipular con ellos
00:20:09
entonces cuando yo quiera un montón de datos
00:20:11
me instancio una de esas colecciones
00:20:13
que hay muchos tipos
00:20:16
que ahora veremos cuáles
00:20:17
dependiendo de lo que yo quiera hacer con los datos
00:20:19
hay muchos tipos
00:20:20
me instancio una de esas
00:20:21
y ya tengo mi cajita
00:20:22
y una vez instanciada
00:20:24
pues ya meto cosas en la caja
00:20:27
elimino de la caja
00:20:30
recupero
00:20:31
lo que sea que yo quiera ofrecer
00:20:33
hacer con esos datos
00:20:35
que siempre, pues es eso
00:20:38
insertar nuevo en la caja
00:20:39
borrar, recuperar
00:20:42
y poco más
00:20:44
decirme el tamaño
00:20:46
que tiene, cosas de esas
00:20:48
¿vale? pues esto es una colección
00:20:49
una clase que ya está hecha
00:20:52
para ahorrarnos, hacer lo que ya
00:20:54
sabemos hacer
00:20:56
¿vale? y estas clases, su objetivo es
00:20:57
ofrecerme a mí la posibilidad
00:21:00
de trabajar con un montón de datos
00:21:02
escondiendo la complejidad
00:21:04
de la RAI, que en realidad el RAI
00:21:06
es lo único que hay nativo
00:21:08
entre comillas en Java para guardar muchos datos
00:21:10
es lo único, ¿vale?
00:21:12
todo lo demás está hecho por clases que esconden
00:21:14
esa complejidad, yo las instancio, las llamo
00:21:16
y ya está, esta es la idea de una colección
00:21:18
esto es lo que es una colección
00:21:21
¿vale? ¿qué ibas a preguntar?
00:21:22
no, que estaba pensando en por qué no le hacemos
00:21:24
static esto, pero
00:21:26
yo no sé si esto, o sea, la idea
00:21:28
¿static el qué?
00:21:30
Sí, las clases y los métodos
00:21:31
No, las clases no pueden ser estáticas
00:21:33
O sea, perdón, el método, los métodos
00:21:35
Hombre, para que los métodos sean estáticos
00:21:36
Esto tendría que ser estático
00:21:39
Pero si esto es estático, no, o sea
00:21:40
Cada objeto miArrayList
00:21:43
Que tú instancies, es una caja distinta
00:21:45
O sea, tú quieres
00:21:47
Por ejemplo, uno puede ser nombres, aquí tienes los nombres
00:21:48
Otro puede ser apellidos
00:21:51
Pues otra nueva de apellidos
00:21:53
Cada cajita miArrayList tiene su propia array
00:21:54
O sea, tú quieres esto, me voy a usar ahora
00:21:56
Arrays normales, quiero usar solo Arrays
00:21:59
list, o sea, para aplicar
00:22:01
todas estas cosas.
00:22:03
O sea, si yo hago yo una nueva array, entonces
00:22:04
mejor lo instancio como
00:22:07
array list y ya está. Hombre, más cómodo
00:22:08
que hagas una colección.
00:22:10
Más cómodo que instancies
00:22:13
un objeto array list porque te vas
00:22:15
a dar a escribir tu código.
00:22:17
No porque sea mejor a nivel
00:22:19
de código. Siempre va a ser mejor
00:22:21
todo lo que tú programes
00:22:22
porque tienes un absoluto control
00:22:24
de lo que realmente se va a ejecutar. Desde el momento
00:22:26
que te vienes a llamar a métodos y a delegar
00:22:28
acciones en esos métodos ya pierdes
00:22:31
el control de cómo lo hacen
00:22:33
pero desde luego es mucho más cómodo
00:22:34
a nivel de escritura de código es mucho más cómodo
00:22:37
en lugar de hacerte tú
00:22:39
tu array de nombres, tu array de
00:22:40
apellidos, tu array de notas
00:22:43
puestos de instancias
00:22:45
un objeto array list para tus nombres
00:22:47
que tendrá dentro su propio array
00:22:48
un objeto array list para los apellidos
00:22:50
que tendrá dentro su propio array
00:22:52
un objeto array list para las notas
00:22:54
que tendrá dentro su propio array
00:22:56
y luego ya
00:22:58
cada cosa que quieras hacer
00:22:59
con cada cajita, pues llamas a los
00:23:02
métodos de ese objeto
00:23:04
¿vale? en la cajita A
00:23:05
quiero añadir un nombre nuevo
00:23:07
en la cajita B, que era la de apellidos
00:23:09
quiero borrar un apellido
00:23:12
entonces el código queda muchísimo más fácil
00:23:13
de hacer, aunque luego se esté ejecutando
00:23:16
lo mismo, porque
00:23:18
cada vez que tú llamas a Adelete
00:23:19
te estás metiendo en un método
00:23:22
que hace lo que hemos hecho nosotros todo el rato
00:23:24
¿vale?
00:23:26
Pero Java esto te lo da
00:23:28
Java de por sí ya tiene una arraylist
00:23:30
Una clase de arraylist de por sí
00:23:32
Claro, claro, es lo que decía
00:23:33
Pero te la podrías haber hecho tú
00:23:37
Las colecciones son
00:23:39
Clases que nos dan ya hechas
00:23:41
Como otras millones de miles de clases
00:23:43
Como local que nos dan hechas
00:23:45
Para apretarnos la vida
00:23:46
Pero lo que tienen dentro son cosas que podríamos haber hecho nosotros
00:23:47
Lógicamente
00:23:51
Entonces yo por esto este le he llamado
00:23:52
Mi arraylist, si lo hubiéramos tenido que hacer nosotros
00:23:54
Lo habríamos hecho así
00:23:56
Vale, vamos a hacer
00:23:57
Una versión sencilla
00:24:11
Para que lo veamos más claro
00:24:12
De nuestro
00:24:14
ArrayList particular y como lo usaríamos
00:24:17
Y luego ya explicamos
00:24:19
Porque luego ya
00:24:20
Las colecciones que trae Java
00:24:22
Pues no son solo ArrayList, son muchas otras
00:24:24
están clasificadas en función del tipo, patatín, patatán
00:24:26
y eso ya pues sí que tenemos que ver
00:24:29
solamente para acabar de entender
00:24:31
por qué existen las colecciones
00:24:34
y cuál es su filosofía de uso
00:24:36
vamos a
00:24:38
si nos programáramos la nuestra propia
00:24:39
¿cómo lo haríamos?
00:24:42
vale
00:24:50
pues venga
00:24:51
En japonés.
00:24:59
Vale.
00:25:22
vale, pues vamos a utilizar
00:25:23
este primer proyecto
00:25:30
que he subido a la virtual para
00:25:31
programar nuestras propias colecciones
00:25:35
que el linked list también
00:25:37
lo vais a programar, porque ese sí que es chulo y divertido
00:25:38
el linked list
00:25:41
la lista enlazada
00:25:43
linked
00:25:45
no es linkedin
00:25:47
del linked list
00:25:48
vale, me hago un paquetillo
00:25:51
Por aquí un paquetillo
00:25:53
Para ArrayList
00:25:54
Venga, pues me voy a hacer
00:25:56
Un main para motivar
00:26:06
Lo interesante que puede ser esto
00:26:08
Pues resulta que yo tengo aquí un programa
00:26:10
Que me pide trabajar
00:26:22
Con un montón de nombres
00:26:24
Y un montón de notas, por ejemplo
00:26:26
O lo que sea, vale
00:26:29
Entonces, joder, tengo que trabajar con un montón de nombres
00:26:30
Haciendo cosas
00:26:33
Pues nada
00:26:34
Tengo que trabajar con un montón de nombres
00:26:35
Pues nos haríamos esto
00:26:39
Y ya tendríamos el primer problemilla
00:26:42
Que es
00:26:45
Jolines
00:26:46
Que rollo
00:26:48
Tener que decidir desde ya el tamaño
00:26:49
Que rollo
00:26:52
Vale, pues esta es la primera
00:26:54
Complejidad que vamos a envolver
00:26:56
Con nuestra clase
00:26:59
Mi ArrayList
00:27:01
Esta es la primera cosa
00:27:02
que vamos a ocultar ya
00:27:03
para que no moleste
00:27:07
porque ahora uno sueña despierto
00:27:08
y dice, jolín, ojalá
00:27:10
yo tuviera una clase
00:27:12
ojalá yo tuviera una clase
00:27:14
así de largo
00:27:24
los hay, y más
00:27:31
y más
00:27:32
ya veréis como seis fringos
00:27:33
Vale, pues ojalá yo tuviera una clase
00:27:37
Que en lugar de lo de arriba
00:27:40
Me permitiera hacer esto
00:27:42
Yo la instancio
00:27:45
Sin más
00:27:48
Y el tamaño que se adapte
00:27:48
Yo creo la caja
00:27:52
Y según meto en la caja
00:27:54
Que se vaya agrandando
00:27:56
Eso es un problema suyo
00:27:57
Y según saco de la caja que vaya encogiendo
00:27:58
Es un problema suyo
00:28:01
Yo aquí en mi main no quiero problemas
00:28:01
No quiero nada de tener que tomar decisiones sobre el tamaño
00:28:04
No quiero, no me interesa
00:28:07
Yo creo la caja
00:28:09
Y que esa caja ya tenga la posibilidad
00:28:10
De hacerse grande, pequeña
00:28:13
Según yo le dé cosas o se las quite
00:28:14
Ese es el primer problema
00:28:16
Que quiero eludir
00:28:18
Vale, pues vamos a crearnos esa caja
00:28:19
Que nos permite olvidarnos
00:28:24
De esas problemáticas
00:28:26
Vamos a crearnos esta clase
00:28:27
Venga
00:28:29
Ahí me la he creado en el mismo paquete
00:28:31
Vale, esta
00:28:39
Ahí me la creo
00:28:40
Esa clase que yo quiero instanciar desde aquí
00:28:48
Vale
00:28:50
Esta clase
00:28:53
¿Para qué quería que me sirviera?
00:28:54
Para guardar muchos stream
00:28:56
Pues venga
00:28:57
Inicialmente
00:28:59
Cuando la caja se cree por primera vez
00:29:05
¿Qué tamaño queremos que tenga?
00:29:08
Cero pelotero
00:29:12
Vale
00:29:13
Yo aquí después de hacer el new
00:29:16
Mi cajita
00:29:18
Cero
00:29:21
Ya sea la grande cuando le metamos cosas
00:29:22
Ahora mismo cero
00:29:24
Vale
00:29:25
Y esta propiedad
00:29:27
Puede ser un private magnífico
00:29:29
Ahí estupendo
00:29:32
Porque nadie tiene que acceder a ese array
00:29:33
En absoluto
00:29:36
Solamente la propia cajita
00:29:38
Para meter cosas si yo se la doy y sacarlas
00:29:40
Nadie más tiene que acceder a ese array
00:29:42
Entonces hay un private estupendo
00:29:44
Vale
00:29:46
Ahora
00:29:49
Ahora yo quiero meter un nombre nuevo que me han dado
00:29:50
Quiero meter el primer nombre
00:29:54
Jolines, pues yo quiero, ya que he creado una caja
00:29:55
Que quiero que me
00:29:58
Exima de todos
00:30:00
Los problemas
00:30:02
Pues yo quiero esto, esto es lo que yo quiero
00:30:03
Yo quiero poder
00:30:06
Hacer esto, añade un nombre
00:30:08
Y olvidarme de todo
00:30:10
Eso es lo que yo quiero hacer, desde este main
00:30:12
O desde este otro main, o desde donde me dé la gana
00:30:14
Esto es lo que yo quiero
00:30:16
Esto es mi sueño
00:30:17
Añade Luis, y ya está
00:30:21
Y saber que ese nombre Luis está en la caja
00:30:24
Esto es lo que yo querría
00:30:26
Olvidarme de todo lo demás
00:30:27
Bueno, pues para eso
00:30:30
La clase miArrayListChulo, etcétera, etcétera
00:30:33
Necesita tener este método
00:30:36
Claro, necesita tenerlo
00:30:38
No hay otra
00:30:40
Bueno, cómo ver qué importará
00:30:40
Hay que hacerlo
00:30:44
Es una clase nueva, ¿qué estamos haciendo?
00:30:44
Pues nada
00:30:48
Vamos a hacer
00:30:48
Este método
00:30:51
Vale, pues este método
00:30:52
que queremos que haga
00:30:57
queremos que coja este dato
00:30:59
agrande
00:31:02
en una posición
00:31:04
este array, lo agrande
00:31:05
en una, lo meta
00:31:08
y lo sustituya, bueno pues lo que hemos
00:31:10
hecho mil veces
00:31:12
aux igual
00:31:13
new string
00:31:16
de
00:31:24
dato.length
00:31:25
más uno
00:31:28
agrandamos, hacemos una cajita
00:31:29
Auxiliar con una posición más
00:31:32
Datos
00:31:34
Sí, vale
00:31:37
Y len sin paréntesis
00:31:39
Vale
00:31:42
Ahora copiamos una en el otra
00:31:43
Menor que
00:31:46
Datos.lens
00:31:52
Incrementando
00:31:55
Y
00:31:57
Pues que hacemos
00:31:57
En aux de y queremos que vaya
00:31:59
Datos de y
00:32:02
Vale
00:32:03
Ya hemos copiado todas las posiciones
00:32:05
Salvo la adicional de AUX
00:32:08
Que está vacía
00:32:10
Pero claro, en la adicional de AUX
00:32:11
Queremos que vaya dato
00:32:13
AUX, en la adicional de AUX
00:32:15
Que es AUX.len
00:32:19
Dígame
00:32:22
Vale
00:32:22
Pues en la adicional de AUX
00:32:27
Queremos que vaya dato
00:32:31
Y ahora AUX es nuestra nueva caja
00:32:32
AUX ya es la caja buena
00:32:35
Es nuestra nueva caja
00:32:37
Con lo cual la caja vieja
00:32:38
Fuera
00:32:39
La caja vieja fuera
00:32:41
Queremos la nueva caja
00:32:43
Pues ya está
00:32:44
Ya tenemos el método aux
00:32:50
Perdón, el método add
00:32:54
El método de siempre, ya está hecho
00:32:55
Entonces yo ahora desde cualquier otro sitio
00:32:58
Desde mi main que está aquí
00:33:02
O desde otro main que esté en otro lado
00:33:04
O desde donde sea
00:33:06
Yo puedo meter nombres en esa caja
00:33:07
Mira, voy a meter Luis
00:33:10
En la caja está Luis
00:33:11
Mira, ahora voy a meter otro nombre
00:33:12
Pues Ala
00:33:15
Y genial, súper práctico esta clase
00:33:16
Me permite guardar cosas con el add
00:33:22
Y yo olvidada de
00:33:24
Todos los rollos de Array, es que aquí ni veo Array
00:33:28
No lo veo por ningún sitio
00:33:30
¿Dónde está el Array? No sabemos
00:33:31
Vale, lo que pasa es que una caja
00:33:33
Que me vale solo para meter
00:33:38
Pues que oculta es, ¿no?
00:33:40
Que oscurantista
00:33:42
O sea, hombre, también querré
00:33:44
Ver lo que hay dentro
00:33:46
o eliminarlo
00:33:47
con un array yo puedo recorrerlo
00:33:50
para ver lo que hay, o sea, si en un almacén
00:33:51
de datos no puedo
00:33:54
acceder a lo que hay dentro del almacén de datos
00:33:55
tal cual los meto perdidos
00:33:57
para siempre, pues no tiene mucho sentido
00:33:59
¿no? vale, pues a mí me encantaría
00:34:01
poder recorrer, por ejemplo
00:34:04
esta colección, ¿vale?
00:34:05
vale, la posibilidad de recorrer
00:34:32
la colección queremos tenerla
00:34:34
o sea, nosotros podíamos recorrer un array
00:34:35
con un for, ¿verdad? podíamos recorrer
00:34:37
para ver lo que hay en cada posición
00:34:39
y así veíamos lo que había, si nos interesaba
00:34:41
es lo que hacíamos con un array, recorrerlo y acceder a posiciones sueltas
00:34:43
bueno, pues también querríamos poder con mi caja
00:34:47
es decir, yo querría
00:34:50
voy a poner primero acceder
00:34:53
acceder a elementos de la colección
00:34:57
yo querría la posibilidad de acceder
00:35:00
igual que podía un array, yo mi array, si fuera mi array nombres
00:35:05
yo podría poner nombres de 3, nombres de 1
00:35:08
pues aquí querría poder acceder también
00:35:11
Entonces, ¿cómo me gustaría a mí tener un método que con esta cajita me permitiera recuperar el elemento en una posición cualquiera?
00:35:14
En la cero, por ejemplo.
00:35:30
Ojalá, ojalá tuviera un método que me permitiera recuperar, que me devolviera el elemento en esa posición,
00:35:32
que me lo devolviera para que yo lo consultara y viera cuál es.
00:35:40
Igual que tengo el array, si esto fuera un array, ya sabemos que tenemos esto.
00:35:43
Pero es que esto no es un array
00:35:50
Pero yo tengo que poder hacer a la posición
00:35:52
De la caja igualmente
00:35:54
Pues ojalá tuviera yo un método
00:35:55
Que me hiciera esto
00:35:58
Ojalá lo tuviera
00:36:00
Pues hombre, ¿por qué no?
00:36:01
Es muy fácil, ¿por qué no? Vamos a hacérselo
00:36:04
Pues venga, en mi super clase
00:36:06
En mi ArrayList
00:36:10
Yo le puedo hacer
00:36:11
Un método
00:36:13
Que me devuelva un string
00:36:15
Hacemos este método y paramos
00:36:18
Que yo le paso una posición
00:36:22
¿Vale?
00:36:25
Y me devuelvo lo que hay en esa posición
00:36:27
Vale, vamos a validar
00:36:31
Que la posición sea correcta
00:36:35
Porque si no
00:36:36
Si posición
00:36:37
Es mayor
00:36:40
Que datos.length
00:36:42
Menos uno
00:36:46
O
00:36:47
Posición
00:36:51
Es menor que cero
00:36:56
Problemas, la posición me la han pasado mal
00:36:58
Problemas
00:37:00
Pues entonces aquí pongo un null y ya está, por ejemplo
00:37:01
¿Vale? Es la versión que estoy haciendo
00:37:04
Return null
00:37:06
Devuélveme un objeto null
00:37:07
Si la posición es incorrecta
00:37:10
Y si no
00:37:12
Y si no
00:37:14
Pues return el qué
00:37:18
Pues return datos
00:37:19
De posición
00:37:21
Y tan ricamente
00:37:23
Y tan ricamente
00:37:26
¿Vale?
00:37:28
Pues ala, un método estupendo
00:37:39
Que me permite a mí
00:37:40
Dada una posición, ver que hay
00:37:42
Pues yo ya desde mi main
00:37:44
Sin problemas
00:37:47
Aquí puedo mostrar lo que hay en la posición 0
00:37:49
Y lo que es más
00:37:52
Podría recorrer
00:37:54
El array
00:37:56
La caja
00:37:58
Ahora después lo hacemos
00:37:59
Vamos a probar esto sin más
00:38:00
Entonces yo ejecuto esto
00:38:02
Y ala, estupendo
00:38:04
Que quiero ver lo que hay en la posición 1
00:38:12
Pues en la posición 1 me mostrará
00:38:15
Que quiero ver lo que hay en la posición 7
00:38:17
Me va a dar un null
00:38:21
Pues null
00:38:24
En la posición 7
00:38:25
No hay posición 7
00:38:26
¿Veis? Entonces desde mi main
00:38:28
Yo ahí en mi main
00:38:31
Ni tengo a raíz
00:38:33
Ni tengo cosas extrañas
00:38:35
Desde mi main tengo una caja que instancio
00:38:37
Para guardar stream
00:38:39
Solamente vale para stream, eso sí
00:38:41
Añado
00:38:42
recupero por posición
00:38:44
y podríamos añadir más métodos
00:38:46
¿vale?
00:38:49
pues esto es una colección
00:38:51
una clase que me permite
00:38:52
almacenar un montón de datos
00:38:54
y me ofrece unos métodos para manipularlos
00:38:56
y esos métodos
00:38:59
pues son métodos normales y corrientes
00:39:00
que podemos hacer nosotros
00:39:03
pero claro, luego me es a mi más cómodo
00:39:04
usar directamente esa colección
00:39:07
en cualquier otro sitio, la uso
00:39:08
y ya está, es mucho más fácil
00:39:11
Pues el ArrayList
00:39:13
El ArrayList es esto
00:39:15
Con más métodos
00:39:17
Lógicamente y más depuraditos
00:39:20
Y saltado a genérico
00:39:22
Que es lo que sí que no sabemos hacer todavía
00:39:24
Para que yo pueda guardarme
00:39:26
Da igual que sea string, que sea int, que sea lo que sea
00:39:27
Pues esto es un ArrayList
00:39:29
Vale, vamos a parar aquí un momentico
00:39:31
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 7
- Fecha:
- 2 de febrero de 2026 - 10:31
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 39′ 36″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 1.35