Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Clase 26-02-24 - 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:
Venga, pues vamos a seguir avanzando un poquito, estamos muy atascados y muy parados.
00:00:01
¿Vale?
00:00:06
Bueno, pues esto sería otro tema, ¿vale?
00:00:17
Dejamos ahí ya esbozada la herencia y la implementación de interfaces,
00:00:21
que ya más o menos conocemos
00:00:25
primero
00:00:28
qué sentido tiene que exista
00:00:29
es lo más importante, qué sentido tiene que exista
00:00:31
y segundo
00:00:33
cómo se programa ya
00:00:35
usando herencia e implementación
00:00:38
pues bueno, ya que tenemos esbozado eso más o menos
00:00:39
pues vamos ya a introducir
00:00:41
más
00:00:43
conceptos
00:00:45
que usan precisamente herencia
00:00:47
e implementación
00:00:49
la usan
00:00:50
todas sus variantes
00:00:52
entonces
00:00:56
todo lo que se puede hacer en Java
00:00:57
todo lo que se puede hacer en Java
00:00:59
ya lo sabemos
00:01:01
ya lo sabemos hacer todo
00:01:03
lo que pasa es que claro, si uno lo hace
00:01:05
todo a mano
00:01:07
pues entonces tiene muchísimo
00:01:09
trabajo que hacer
00:01:11
entonces gracias a que Java es un lenguaje
00:01:12
de programación y de datos
00:01:15
el código
00:01:16
se distribuye en clases distintas
00:01:19
y ahora ya sabemos que esas clases
00:01:21
son muy fácilmente reutilizables
00:01:23
muy fácilmente
00:01:25
tú en una clase tienes un trozo
00:01:26
de código con un método que hace cosas
00:01:29
pues ahora ya
00:01:31
desde cualquier otra puedes llamar a ese método
00:01:33
para hacer eso, ¿vale?
00:01:35
eso ya es una reutilización
00:01:37
tú tienes una clase que hace cosas
00:01:38
y esa clase la utilizas ya el resto de tu vida
00:01:40
¿vale? reutilización
00:01:43
¿qué otras
00:01:45
formas de reutilización tenemos?
00:01:47
pues precisamente la herencia, tú tienes una clase
00:01:49
si heredas de ella
00:01:51
ya tienes mucho hecho
00:01:53
eso es otra forma de reutilización
00:01:55
entonces
00:01:57
los lenguajes de programación
00:01:59
en todos los objetos
00:02:01
sobre todo lo que han aportado
00:02:02
lo único que han aportado respecto a la programación
00:02:04
estructurada de
00:02:07
y variables una tras otra
00:02:08
lo que han aportado es
00:02:11
cómo organizar el código
00:02:12
y la facilidad para reutilizarlo
00:02:14
no tenerlo que hacer nosotros todo
00:02:17
así en plan chorizo
00:02:19
Bueno, pues todo lo que vamos a ver a partir de ahora
00:02:20
Y todo lo más que podáis ver en Java
00:02:24
Todo
00:02:26
Es precisamente cómo utilizar clases
00:02:26
Que están ya hechas
00:02:29
Ya está, cómo utilizar clases que están ya hechas
00:02:31
Y cómo están hechas por dentro
00:02:33
Con lo que sabéis
00:02:36
Porque no hay nada que no sepáis
00:02:37
¿Vale?
00:02:39
Lo que pasa es que efectivamente
00:02:41
Si uno tiene que hacerlo todo él
00:02:43
Le queda una aplicación inmanejable
00:02:45
Entonces siempre utilizamos clases que están ya hechas
00:02:47
como hasta ahora hemos hecho con la clase string
00:02:49
con la clase scatter y con algunas otras
00:02:52
pero luego
00:02:54
finalmente en última instancia
00:02:56
hacer un desarrollo de una aplicación
00:02:58
lenguaje de todo objeto se traduce en utilizar
00:03:00
un montón de cosas que ya están ya hechas
00:03:02
¿significa eso que esto es fácil?
00:03:03
en absoluto
00:03:06
en absoluto porque
00:03:08
para que las cosas funcionen hay que entender muy bien
00:03:09
que es lo que uno está usando
00:03:12
porque si no lo entiende bien
00:03:13
si no lo entiende bien
00:03:15
si no lo entiende
00:03:16
no lo va a usar bien
00:03:19
y le va a quedar una aplicación que no tiene ningún sentido
00:03:20
aunque no tenga errores de compilación
00:03:23
eso es lo de menos, hacer una aplicación sin errores de compilación
00:03:25
es muy sencillo
00:03:28
hacer una aplicación que haga lo que tiene que hacer
00:03:29
eso es lo complicado
00:03:31
que haga lo que tiene que hacer
00:03:33
y para eso no se trata de utilizar clases
00:03:34
como si fuera esto hacer un Petris
00:03:37
en absoluto, hay que entenderlas bien
00:03:39
y entenderlas más
00:03:41
de todo lo que hemos visto
00:03:43
bueno, pues entonces
00:03:44
esto de ahora es un poquito
00:03:46
vamos a aprender a utilizar clases que están ya hechas
00:03:49
para empezar a solucionarnos
00:03:51
problemas que hemos identificado
00:03:53
que están ahí y que hasta ahora hemos solucionado
00:03:55
a mano, o sea, hemos solucionado programándolos
00:03:57
nosotros directamente
00:03:59
pues resulta que hay clases que nos lo pueden solucionar
00:04:00
bueno, pues uno de esos problemas
00:04:03
que hemos identificado
00:04:05
que da mucha guerra, es el problema
00:04:06
del almacenamiento
00:04:09
almacenamiento de variables, ¿verdad?
00:04:11
el almacenamiento
00:04:22
de los datos de la aplicación.
00:04:23
Ese problema, en realidad, ya nos da
00:04:25
mucha guerra. Si uno tiene datos
00:04:27
sueltos, tres, cuatro numeritos,
00:04:29
una cadena, pues, hombre,
00:04:32
no es tan complicado resolver ese problema.
00:04:33
Se hace sus variables
00:04:36
y, bueno, y ya está.
00:04:37
Ahí va a tirar. Pero si uno tiene
00:04:43
una colección de datos enorme, muchísimos
00:04:45
datos, un montón de clientes,
00:04:47
un montón de números,
00:04:49
un montón de DNIs, que es lo habitual
00:04:51
en una aplicación que tenga un volumen
00:04:53
de datos enorme
00:04:55
pues esto ya sabemos que no
00:04:56
vale, pues que era el salto
00:04:58
que habíamos dado
00:05:01
el array, vale
00:05:02
que el array es una estructura
00:05:04
intrínseca a cualquier lenguaje
00:05:07
de programación
00:05:09
vale, pues bueno, dábamos el salto al array
00:05:09
dábamos el salto
00:05:13
al array
00:05:15
y a la
00:05:16
y ya con esto
00:05:17
ya con esto podíamos guardar
00:05:21
Muchos datos a la vez
00:05:23
Más que a la vez
00:05:25
Muchos datos bajo la misma referencia
00:05:28
Bajo el mismo nombre
00:05:30
¿Vale? Muchos datos bajo el mismo nombre
00:05:31
Pero del mismo tipo
00:05:34
Del mismo tipo
00:05:36
O de tipos heredados
00:05:38
Que eso es lo que nos ha quedado claro con la herencia
00:05:40
¿Verdad? Del mismo tipo de datos heredados
00:05:42
Bueno, pues vale
00:05:44
Ese problema ya lo tenemos resuelto
00:05:46
Y ya está, y es lo que hay, y no hay más
00:05:47
Y no hay otra manera de resolverlo
00:05:49
Ya está, no hay otra
00:05:52
lo que pasa es que
00:05:53
esto se nos hace un rollo
00:05:55
¿se nos hace un rollo por qué?
00:05:57
pues porque cada vez que cambiamos
00:06:00
el tamaño
00:06:02
tenemos que cambiar el array enterito
00:06:02
¿vale? tenemos que cambiarlo entero
00:06:05
no hay otra porque los arrays funcionan así
00:06:07
y no hay otra, no hay alternativa
00:06:09
los arrays funcionan así
00:06:10
si yo declaro este array
00:06:11
de 27 posiciones
00:06:13
ese array se ha quedado de 27
00:06:18
y nunca jamás va a poder ser de otro tamaño
00:06:20
nunca va a poder ser de otro tamaño
00:06:23
si yo quiero un array de otro tamaño
00:06:24
esto
00:06:27
me tengo que deshacer de él
00:06:28
y hacer otro nuevo
00:06:30
es lo único que puedo hacer, lo único
00:06:32
por eso es una estructura estática
00:06:34
¿vale? y eso es lo que hay
00:06:37
y no hay más, y no hay más que se pueda hacer
00:06:38
ya está, no hay más
00:06:41
lo que pasa es que uno puede decir
00:06:42
bueno, pues me voy a hacer yo clases
00:06:44
clases que ya
00:06:47
programen automáticamente
00:06:49
esto de destrozar el array
00:06:50
y hacer uno nuevo
00:06:52
y así no lo tengo que escribir yo a mano
00:06:53
todo el rato, como hemos hecho hasta ahora
00:06:56
¿vale?
00:06:57
pero esas clases lo único que hacen es meter
00:06:59
en métodos, tipo añadir
00:07:02
al array, recuperar, meter en métodos
00:07:04
exactamente lo que nosotros hemos
00:07:06
escrito a mano, nada más, porque no hay nada más
00:07:07
que se puede hacer para almacenar un montón
00:07:10
de datos de golpe
00:07:11
nada más que un array, no se puede hacer nada más
00:07:13
¿vale? pero bueno, hay clases
00:07:15
que envuelven esto
00:07:17
hay clases que te dicen
00:07:20
oye, venga, yo ya tengo
00:07:21
yo tengo un método add
00:07:22
tú dame una cadena
00:07:25
y yo
00:07:29
pues dentro de este método ya te
00:07:31
programo eso de hacer
00:07:33
una array temporal en una posición mayor
00:07:35
copiar uno en el otro, en la posición añadida
00:07:37
copiar esto, ahora
00:07:39
sustituir uno por otro, ya te lo hago yo
00:07:41
te lo hago yo y tú limítate a llamar a add
00:07:43
vale, eso es una cosa que
00:07:45
tenemos y que ya está hecha en una clase
00:07:47
que ahora veremos
00:07:49
que podemos programar y utilizar de forma sencilla.
00:07:51
Lo que pasa es que la gente que idea y piensa y dice,
00:07:57
uff, esto está muy bien para guardar un montón de datos del mismo tipo,
00:08:00
esta estructura de array está muy bien.
00:08:12
Mi problema es este, que yo tengo un montón de datos del mismo tipo
00:08:15
que necesito manejar de forma fácil todos juntos.
00:08:21
entonces
00:08:24
lo he ido a manejar de forma fácil
00:08:26
entonces ya
00:08:29
hemos dicho que declararlo en variables separadas
00:08:30
S1, S2, S3
00:08:33
S4, S5
00:08:35
esto es un rollo, declararlo en variables separadas es un rollo
00:08:36
¿no? ¿cómo hago yo
00:08:39
un recorrido?
00:08:41
¿variables separadas? no
00:08:43
vale, pues lo que hemos dicho es, venga, pues a una raíz
00:08:44
todas estas
00:08:51
variables
00:08:53
todas metiditas a una raíz
00:08:54
vale, esta es la solución
00:08:57
la única que tenemos
00:09:00
todas metidas a un array
00:09:01
entonces ahora este array ya tiene un único nombrecito
00:09:03
y al tener un único nombre
00:09:06
se me facilita el recorrido con sd0
00:09:07
sd1, etcétera, lo que ya sabemos
00:09:10
y luego el siguiente
00:09:11
paso que hemos dicho es, oye
00:09:14
si hay una clase
00:09:15
que ya tiene los métodos hechos
00:09:17
de insertar, eliminar
00:09:19
de forma que yo llamo
00:09:22
a esos métodos y ya
00:09:23
y me ahorro toda la parte de hacer una array
00:09:25
más grande, sustituir, pues fenomenal
00:09:27
vale, esa clase está
00:09:29
que se llama
00:09:30
ArrayList, vale
00:09:33
ya veremos como se usa y que
00:09:34
particularidades
00:09:37
tiene, que hay que entender
00:09:39
para usarla bien, vale, pues esa clase se llama
00:09:40
ArrayList y ya está
00:09:43
vale, pero bueno
00:09:44
esto está muy bien, pero jolines
00:09:46
ya hemos vivido en nuestras carnes que
00:09:49
a nosotros nos parece
00:09:51
que llamara el método add
00:09:53
de ArrayList
00:09:55
para añadir una nueva cadena
00:09:56
decimos add y nos creemos que es tan fácil
00:09:59
ya sabemos que no es tan fácil
00:10:02
porque ya sabemos que es lo que tiene este método dentro
00:10:03
porque lo hemos hecho un montón de veces
00:10:06
quitar el Array
00:10:07
hacer uno nuevo, copiar uno en otro
00:10:09
copiar uno en otro
00:10:11
implica consumir muchos ciclos
00:10:13
de CPU, es decir
00:10:15
hay mucho código
00:10:17
para nosotros al final se acaba traduciendo
00:10:18
en llamar a add de esta clase
00:10:21
pero hay mucho código debajo
00:10:23
que lo hemos hecho nosotros también
00:10:25
un montón de ciclos de CPU
00:10:26
copiando, pegando, etc
00:10:29
entonces, pues los que piensan y todo eso
00:10:30
dicen, ¿habría alguna otra manera?
00:10:33
¿habría alguna otra manera
00:10:35
de guardar un montón de datos del mismo tipo?
00:10:36
se me ocurriría con lo que sabemos
00:10:39
con lo que sabemos, no con nada nuevo
00:10:41
porque es que no hay nada nuevo
00:10:42
se me ocurriría con lo que sabemos
00:10:43
otra forma de guardar datos del mismo tipo
00:10:46
que sea un poquito más eficiente
00:10:48
a la hora de insertar
00:10:50
y eliminar que esta
00:10:52
porque es que esta es un rollo, repito
00:10:54
esta implica tirar esto
00:10:57
hacer otra, copiar
00:10:59
habría una forma de guardar varios
00:11:01
porque este es mi problema
00:11:03
yo tengo un montón
00:11:19
del mismo tipo
00:11:20
y quiero hacer una estructura
00:11:22
que me permita manejarlos
00:11:25
de forma sencilla a todos
00:11:27
bajo una misma referencia
00:11:29
ya hemos visto que una es
00:11:30
meterlos en la cajita del array
00:11:32
esa es una
00:11:33
bueno, pues se nos podría ocurrir otra
00:11:34
a ver, es una pregunta muy difícil
00:11:38
porque es muy complicado que a uno se le ocurra otra
00:11:43
precisamente esa otra forma
00:11:45
es la que voy a decir
00:11:48
pero el problema sería
00:11:48
¿qué otra cosa puedo hacer?
00:11:51
con un montón de datos sueltos
00:11:54
que no sea meterlos en un array
00:11:55
para trabajar con ellos
00:11:57
bajo una misma referencia, una única
00:11:59
y que sea sencillo
00:12:01
que solamente un único nombre
00:12:03
de variable, como ocurre con el array
00:12:05
con el array tenemos un único nombre de variable
00:12:07
el del array, y con eso ya accedemos a todo
00:12:09
la 0, la 1, la 2
00:12:11
pues se nos ocurre alguna otra forma
00:12:13
que con un único nombre de variable
00:12:15
me permita a mí hacer recorridos
00:12:17
acceder a todos, etc.
00:12:19
¿Pero una constante?
00:12:24
¿Eh?
00:12:26
¿Pero una constante?
00:12:27
¿Usándola de qué manera?
00:12:31
la de colección
00:12:32
¿perdón?
00:12:34
de colección
00:12:35
de array
00:12:36
pero no te entiendo, si no me das más detalles
00:12:37
o sea, la referencia única
00:12:43
¿cuál sería?
00:12:45
que no entiendo lo que quieres decir
00:12:49
o te explican mejor
00:12:50
porque una constante colección de array
00:12:54
no entiendo lo que quieres decir
00:12:56
bueno, el problema es, bajo una única referencia
00:12:58
poder recorrerlos
00:13:01
todos, poder tener la información
00:13:03
accesible bajo una única referencia
00:13:04
como hace el array, ¿verdad?
00:13:07
El array tiene bajo una única
00:13:09
referencia el nombre del array
00:13:11
bajo una única referencia
00:13:12
que es esta, una única declaración de variable
00:13:18
una única declaración
00:13:20
los tiene accesibles a todos
00:13:21
a través del corchete
00:13:23
S0, S1, S2
00:13:26
¿vale?
00:13:28
bajo una única referencia
00:13:29
bajo un único nombre de variable
00:13:32
ya los tiene todos, S0, S1, S2
00:13:33
pues eso es lo que queremos
00:13:35
habría alguna forma de bajo un único
00:13:37
nombre de variable
00:13:40
bajo un único nombre de variable
00:13:41
declarar algo
00:13:43
bajo un único nombre de variable que me permita
00:13:45
acceder a todo
00:13:47
y que no sea un array
00:13:48
no es fácil, que a uno se le ocurra
00:13:50
pero pues los que
00:13:55
piensan y enseñan estas cosas
00:13:57
dijeron, hombre, vamos a hacer un invento
00:13:59
vale, esta referencia
00:14:02
que sea la referencia
00:14:04
de uno de ellos
00:14:05
solo de uno, de este
00:14:06
este que sea ese
00:14:08
¿vale? y ahora este dato
00:14:09
le voy a pegar
00:14:12
le voy a pegar
00:14:15
la dirección del siguiente
00:14:18
o sea, tendrá el dato
00:14:21
el que sea
00:14:23
su dato, pero le voy a pegar
00:14:25
también la dirección
00:14:27
del siguiente elemento
00:14:28
vale, y ahora
00:14:30
este tendrá su dato, lo que sea
00:14:33
y le voy a pegar detrás
00:14:35
la dirección del siguiente
00:14:37
y ahora este
00:14:39
tendrá su dato
00:14:41
y le voy a pegar también detrás
00:14:42
la dirección del siguiente, la referencia
00:14:44
y ahora este
00:14:47
tendrá su dato y le voy a pegar
00:14:49
también la dirección del siguiente
00:14:51
si este es el último, pues que le estoy pegando
00:14:52
aquí
00:14:55
la dirección de un objeto que ya no existe
00:14:55
que le estaría pegando a ese
00:14:59
¿verdad?
00:15:00
vale, pues
00:15:03
una única referencia
00:15:04
S, los datos
00:15:06
están aquí guardaditos
00:15:08
¿qué nos hemos inventado?
00:15:09
vamos a pegar a cada dato
00:15:14
una especie de información de control
00:15:16
que no forma parte del
00:15:18
no es el dato así, si estos son cadenas
00:15:20
hola, adiós, lo que sea, nombres, Pepito, Juanito
00:15:22
pues es una información de control
00:15:24
que está aquí pegadita
00:15:26
que lo único que tiene es
00:15:27
la dirección del siguiente
00:15:29
y entonces bajo esta única referencia
00:15:31
según yo vaya metiéndome los datos
00:15:36
puedo llegar a este, si quiero llegar a este de aquí
00:15:39
pues me meto en este, a través de este me meto en este
00:15:41
y a través de este ya llego aquí
00:15:45
entonces bajo esta única referencia en realidad tengo accesibles todos
00:15:46
tengo accesibles todos, que es la idea
00:15:51
tener todos accesibles bajo una única referencia
00:15:53
incorporando
00:15:57
esta especie de información aquí pegadita
00:15:59
de control que va junto
00:16:02
con el dato en sí, el dato ya el que sea
00:16:04
el cliente, el nombre
00:16:06
del usuario
00:16:07
lo que sea, el dato que vaya ahí
00:16:09
¿vale?
00:16:12
pues esta estructura es una estructura
00:16:14
básica de almacenamiento de datos
00:16:16
en programación de toda la vida
00:16:18
básica
00:16:20
que es la lista enlazada
00:16:20
entonces la estructura de lista enlazada es básica
00:16:24
en programación, es la que se ha usado
00:16:32
siempre para guardar
00:16:34
datos como alternativa al array
00:16:36
¿vale? como alternativa al array
00:16:38
y uno diría
00:16:41
¿y qué me aporta esta?
00:16:44
respecto al array, si ya tengo
00:16:46
el array, ¿qué me aporta
00:16:48
esta?
00:16:50
hombre, pues esta me aporta que las
00:16:52
inserciones
00:16:53
y las eliminaciones de datos son mucho
00:16:55
menos costosas
00:16:58
computacionalmente
00:16:59
aquí añadir un dato nuevo implica
00:17:01
ala, hace aparecer el dato con el new
00:17:04
Y ahora ya, esta
00:17:05
La haces pasar de nula a este
00:17:07
O sea, no tienes que
00:17:10
Tirar nada a la basura
00:17:11
Volverlo a construir, copiar de uno en otro
00:17:14
Como con el array
00:17:16
Meter un dato nuevo en la lista es facilísimo
00:17:16
Llega uno a la lista y le da la mano al otro
00:17:20
¿Vale? Están todos dados de la mano
00:17:22
Cuando llega uno
00:17:24
Lo que haces, se da de la mano al último
00:17:26
Y ya está, no tienes que hacer nada
00:17:28
Para eliminar un dato
00:17:30
Con el array era un rollo
00:17:32
teníamos que hacer otro con una posición menos
00:17:34
copiar y pegar saltándonos el primero
00:17:36
todo eso tiene un coste computacional
00:17:38
aunque nos lo haga la clase
00:17:40
ArrayList ya porque ya lo tiene ya hecho
00:17:42
por dentro y yo llamo al método, pero lo hace
00:17:44
igual, eso es lo que se hace
00:17:46
me da igual que lo haya programado yo
00:17:48
que se lo encargue a la ArrayList
00:17:50
eso computacionalmente es
00:17:52
un rollo, sin embargo aquí
00:17:54
que yo quiero eliminar este dato
00:17:56
este se va de la lista
00:17:58
y ahora los que se dan la mano son
00:18:00
simplemente este y este
00:18:02
este se suelta de la mano
00:18:04
de ese se suelta y estos dos ya se la dan
00:18:06
y ya está, y lo han dejado y puenteado
00:18:08
no hay datos que copiar
00:18:10
ni que eliminar, ni que nada, no hay nada
00:18:12
entonces
00:18:14
insertar nuevos elementos
00:18:16
en esta colección
00:18:18
y sacar elementos de esta colección
00:18:20
a nivel computacional
00:18:23
de acciones
00:18:25
que hay que hacer es muchísimo
00:18:26
más sencillo que con el array
00:18:29
mucho más sencillo
00:18:31
¿Vale? Te estás durmiendo, Miguel
00:18:32
Cosa que, con lo interesante que es
00:18:35
No puedo entenderlo
00:18:37
Pero bueno, ¿eh?
00:18:38
Pero chico, que tienes 20 años
00:18:43
Y 19, 18
00:18:45
Yo tampoco
00:18:45
Ni aquí me tienes
00:18:48
Está claro
00:18:49
Bueno, a ver
00:18:52
Bueno, vale
00:18:54
Entonces
00:19:00
esto es lo que aporta
00:19:01
esto es lo que aporta
00:19:04
entonces dices, bueno, tampoco es tan crítico
00:19:05
hombre, pues sí que es crítico
00:19:08
en una aplicación
00:19:10
en la que tienes que estar
00:19:11
una aplicación que una de las funcionalidades principales
00:19:13
es insertar y quitar datos
00:19:16
en una en la que tienes que insertar
00:19:18
y quitar datos todo el rato
00:19:20
nunca cogerías un ArrayList
00:19:22
porque es que
00:19:24
metería mucha carga, si ya la máquina virtual
00:19:26
mete carga, si encima metes
00:19:28
un ArrayList en una aplicación en la que tú sabes
00:19:30
que los usuarios van a estar todo el rato insertando
00:19:32
y eliminando de los datos
00:19:34
pues ya hay colmo
00:19:36
ya sí que la ralentizas
00:19:37
en una aplicación en la que estés sobre todo
00:19:40
insertando y quitando datos
00:19:42
elegirás esta estructura
00:19:44
lo que pasa es que ¿qué pega tiene esta
00:19:46
estructura? que como ahora veremos, porque la vamos a
00:19:50
programar, como ahora veremos
00:19:52
el recorrido es más complicado
00:19:54
la consulta, con un Array
00:19:56
cuando tú quieres el dato
00:19:58
de posición 7
00:20:00
facilísimo
00:20:01
haces S7
00:20:03
y ya está, ya lo tienes
00:20:05
va por índice
00:20:07
en un array tú accedes con índice
00:20:08
das el índice, quiere la posición 3
00:20:10
ala, ya la tienes
00:20:13
S3
00:20:14
accedes por índice, luego las consultas
00:20:16
el consultar lo que hay en un sitio
00:20:19
es mucho más rápido
00:20:21
pero una lista enlazada
00:20:23
para consultar lo que está en la posición 3
00:20:25
tienes que ir navegando
00:20:28
entrar por aquí, de aquí vas por aquí
00:20:31
de aquí vas por aquí, de aquí vas por aquí
00:20:34
luego consultar lo que tiene
00:20:35
un dato
00:20:38
es más costoso computacionalmente
00:20:38
porque tienes que ir avanzando aquí con las manitas
00:20:41
hasta que llegas
00:20:43
no va por índice como este
00:20:44
entonces cuál es mejor o cuál es peor
00:20:46
depende del uso
00:20:48
que vayamos a dar a esa estructura
00:20:51
de datos
00:20:53
si sobre todo la aplicación
00:20:54
va a necesitar
00:20:57
muchas inserciones y borrados
00:20:59
uno elegiría esta
00:21:01
pero si la aplicación sobre todo
00:21:03
va a hacer
00:21:07
muchas consultas, es sobre todo
00:21:08
para consultar y no para insertar
00:21:11
y borrar, pues elegiríamos esta
00:21:13
sin duda
00:21:15
cuando hay pocos datos
00:21:15
son diferentes criterios
00:21:21
cuando hay pocos datos, es una
00:21:23
aplicación mía que yo necesito
00:21:25
nada, tener ahí 10 numeritos
00:21:27
que voy a hacer cosas con ellos, pues con 10 numeritos
00:21:28
uno hace un ArrayList y ya está
00:21:31
no se complica, porque un Array de 10
00:21:33
no tiene ningún peso
00:21:34
pero una aplicación en la que estás trabajando
00:21:35
con 20.000 usuarios que tienes que
00:21:38
volcar de la base de datos
00:21:40
a una colección, pues nunca
00:21:42
usarías un ArrayList, un Array de 20.000
00:21:44
menudo coñazo, aunque tú
00:21:46
no lo notes, porque tú haces add, remove y ya está
00:21:48
aunque tú no lo notes, por debajo es muy pesado
00:21:50
no harías un ArrayList con 20.000
00:21:52
usuarios, harías un link
00:21:54
harías esto
00:21:56
harías esto que es
00:21:57
infinitamente más eficiente
00:21:59
cada vez que llega uno y se va
00:22:01
es facilísimo
00:22:02
hay más estructuras de datos
00:22:03
en programación que se han pensado
00:22:09
para facilitar precisamente
00:22:11
un uso eficiente
00:22:13
de los datos
00:22:15
hay una
00:22:17
que esa ya sí que no la vamos a programar nosotros
00:22:18
porque es un poco
00:22:21
lío
00:22:22
la vamos a usar sin más
00:22:24
sin programarla nosotros
00:22:27
la vamos a usar sin más, pero tenéis que conocerla
00:22:28
tenéis que conocer que es si esta
00:22:31
es la lista enlazada
00:22:32
lista enlazada ya os tiene que sonar a partir de ahora
00:22:34
grabado como tantas cosas que es una lista
00:22:36
enlazada, pues es una estructura
00:22:38
de almacenamiento de datos
00:22:41
en programación, donde cada dato
00:22:42
tiene la dirección del siguiente
00:22:44
la tiene dentro, con lo cual
00:22:46
con tener la dirección del primero es suficiente
00:22:48
con la del primero es suficiente
00:22:50
porque ya cada uno de ellos te va a dar la del siguiente
00:22:52
esa es la lista enlazada, eso ya
00:22:55
que no se os olvide, una estructura
00:22:56
de datos que se puede programar en cualquier lenguaje
00:22:58
de programación, bueno pues otra estructura
00:23:00
de datos
00:23:02
es el árbol
00:23:02
el árbol binario
00:23:04
en esta estructura de datos
00:23:07
los datos no se guardan en una listita
00:23:11
en otros datos de la mano
00:23:13
se guardan así
00:23:14
cada dato tiene
00:23:17
su valor, el nombre del cliente
00:23:21
lo que sea, su valor
00:23:24
y luego además tiene la dirección
00:23:25
del que está a su derecha
00:23:27
y la dirección del que está
00:23:30
a su izquierda. Tiene dos direcciones
00:23:32
metidas dentro.
00:23:34
Este tendrá su dato,
00:23:36
ese es el binario, pero vamos, podría haber árboles
00:23:38
no binarios, pero eso ya sí que no
00:23:40
tiene demasiada complejidad.
00:23:41
Este tendría su vez,
00:23:46
esta es la estructura
00:23:49
del árbol binario
00:23:50
de toda la vida.
00:23:51
¿Qué aporta respecto a la lista enlazada?
00:23:53
arregla un poquito las consultas
00:23:56
hemos dicho antes que ahí está enlazada, es un rollo
00:23:59
pues tienes 20.000
00:24:01
y tú tienes que recuperar el 19.000
00:24:02
pues tienes que
00:24:05
ir avanzando de la manita
00:24:07
hasta llegar al 19.000
00:24:09
¿vale? con el árbol binario
00:24:10
cada vez, paz, te quitas
00:24:13
la mitad de golpe, porque
00:24:15
estos se van almacenando con un
00:24:16
criterio de mayor a menor, aquí tienes un dato
00:24:19
todos los que sean mayores que él, se ponen para acá
00:24:21
y los menores para acá
00:24:23
y aquí lo mismo, todos los que sean mayores que este
00:24:24
para acá, los menores para acá
00:24:27
entonces las búsquedas son muy fáciles
00:24:28
tú buscas, vas navegando
00:24:31
y de golpe ya te has quitado la mitad
00:24:33
ahora te quedas aquí
00:24:35
de golpe te quedas la mitad
00:24:37
entonces es más fácil hacer una consulta
00:24:38
en un árbol binario y llegas antes
00:24:41
obviamente que en una fila
00:24:42
en una fila es que tienes que recorrer la fila enterita
00:24:44
en un árbol binario recorres la fila entera
00:24:46
entonces lo que aporta
00:24:49
esta estructura
00:24:51
es que las consultas son
00:24:51
más fáciles, más rápidas
00:24:54
que esta
00:24:56
¿vale? pero programar esto ya sí que es
00:24:57
un poquito más complicado, entonces esto sí que
00:25:01
lo usaremos
00:25:03
porque es una estructura que está ya programada
00:25:03
en Java hay un montón de clases que son las famosas
00:25:06
colecciones
00:25:09
hola, busco unos alumnos
00:25:09
pues tú dirás
00:25:13
¿ves pd's?
00:25:14
vale, bueno pues entonces
00:25:17
la
00:25:22
esta estructura
00:25:24
de lista enlazada
00:25:30
entonces al que se le ocurrió
00:25:32
que está muy bien porque
00:25:34
insertar y borrar como hemos dicho
00:25:36
es mucho más fácil computacionalmente
00:25:38
de un array
00:25:41
pues el que se le ocurrió la programó
00:25:41
y ya está
00:25:44
y vamos a programarla nosotros también
00:25:45
porque somos muy listos y somos capaces de hacerlo
00:25:48
el resto de colecciones que hay
00:25:50
que ya veremos
00:25:53
que hay muchas variantes luego de esto
00:25:54
hay muchas variantes de listas conjuntos
00:25:56
Veremos cómo se usan
00:25:58
No las programaremos por dentro
00:26:01
Pero esta sí, al menos una hay que programar
00:26:02
Porque tenéis que aprender a programar
00:26:04
Eso es lo que os van a pedir
00:26:06
Que sepáis programar
00:26:08
No que conozcáis la clase B y la clase C
00:26:09
Sino que sepáis programar
00:26:12
Es lo que os van a pedir
00:26:14
Vamos a programar la lista enlazada
00:26:14
Que os va a gustar mucho además
00:26:18
Porque os va a hacer pensar
00:26:22
Y eso es lo que más satisfacción se supone que os tiene que dar
00:26:28
si os habéis matriculado en este
00:26:30
ciclo, el tener la opción de pensar
00:26:33
de que se os mueva la cabeza
00:26:35
bueno pues
00:26:38
vale, pues vamos a pensar
00:26:40
nuestra lista enlazada es algo de este estilo
00:26:43
aquí habrá una referencia
00:26:45
vamos a llamarle inicio
00:26:47
por llamarle de alguna manera
00:26:49
y esta será la dirección
00:26:51
del primer objeto
00:26:55
del primer objeto
00:26:58
de la lista
00:26:59
Este objeto tendrá su dato y ahora aquí tendrá también otra propiedad, otra propiedad, esta propiedad será la dirección del siguiente de la lista, ¿vale?
00:27:00
Vamos a dejar, aquí tendrá su dato, vale, pues entonces lo primero que vamos a programar, vamos a programar estas clases, es decir, cada uno de estos objetos, cada uno de estos objetos pertenecerá a una clase, ¿verdad?, pertenecerá a una clase, cada uno de estos objetos va a pertenecer a una clase, vale.
00:27:18
vamos a darle nombre a esa clase
00:27:40
para programarla
00:27:42
bueno, el término habitual en informática
00:27:43
para los árboles
00:27:46
para las listas
00:27:48
es que esto se le llame nodos
00:27:50
es un nodo de una lista
00:27:52
un nodo de un árbol
00:27:54
bueno, pues para acostumbrarnos a esa terminología
00:27:55
la clase a la que
00:27:59
pertenecen estos objetos
00:28:00
de la lista, vamos a llamarle
00:28:02
nodo
00:28:04
vamos a programar esa clase lo primero de todo
00:28:05
clase nodo
00:28:08
Vale, la clase nodo tiene dos campos, tiene dos campos obligatoriamente, uno, el campo que tiene el dato en sí que guarde la lista, lo que sea, cliente, cadena de datos, número, lo que sea, el dato en sí.
00:28:15
vale, vamos a hacer
00:28:34
esta lista, vamos a tener que elegir
00:28:37
ahora mismo voy a tener que elegir
00:28:39
¿qué queremos que guarde esta lista?
00:28:40
vamos a hacer, vamos a programar
00:28:43
esta lista enlazada para que guarde
00:28:45
cadenas, por ejemplo, para que guarde
00:28:46
cadenas de texto, si queremos que
00:28:49
guarde cadenas, este primer campo
00:28:51
de este objeto, de los dos que tiene
00:28:53
este primer campo
00:28:55
será de tipo
00:28:57
string, ¿verdad?
00:28:58
bueno, pues el primer campo
00:29:00
será de tipo string
00:29:02
luego el campo
00:29:08
dato, este de aquí es de tipo
00:29:10
string, es donde está el dato
00:29:12
recordad que esta estructura es para guardar datos
00:29:13
no es para otra cosa
00:29:16
bueno, pues ese era el primer
00:29:17
campo de este objeto
00:29:20
pero vamos, que si quisiéramos que aquí
00:29:22
guardara un objeto cliente
00:29:26
pues aquí pondríamos cliente
00:29:27
si es que tuviéramos esa clase cliente hecha
00:29:29
si quisiéramos que guardara un número
00:29:31
aquí pondríamos int
00:29:33
eso depende de lo que queramos que guarde nuestra lista
00:29:35
es como el array
00:29:38
vale
00:29:38
pero tiene que tener
00:29:42
este objeto, tiene que pertenecer a una clase
00:29:44
nuestra clase nodo
00:29:47
que además tenga un segundo campo
00:29:48
porque ya hemos dicho que cada objeto
00:29:50
de la lista tiene que apuntar
00:29:53
a su siguiente
00:29:55
vale, pues a este campo le vamos a llamar
00:29:56
así, siguiente
00:29:59
y ahora la pregunta
00:30:00
más importante es
00:30:03
qué tipo de dato
00:30:05
tiene este campo
00:30:07
qué tipo de dato tiene ese campo
00:30:09
qué tipo de dato pongo aquí
00:30:12
este tiene que ser
00:30:14
una referencia
00:30:19
la dirección del siguiente objeto
00:30:21
de la lista
00:30:24
la referencia, su dirección de memoria, el siguiente objeto de la lista
00:30:24
luego, qué tipo de dato
00:30:28
pongo ahí
00:30:30
nodo, perfectamente, muy bien
00:30:30
claro
00:30:34
¿vale?
00:30:34
esto es un objeto
00:30:42
de tipo nodo, es la dirección del siguiente elemento
00:30:44
que es de esta clase
00:30:46
que es de esta, de esta, la misma toda, el nodo
00:30:48
¿vale? luego esta clase a la que pertenecen
00:30:54
mis datos
00:30:56
tiene esos dos campos
00:30:56
esos dos campos
00:31:00
¿vale? luego aquí ya, pues le puedo
00:31:01
poner el constructor, métodos
00:31:09
para acceder a
00:31:12
a esto de aquí, etcétera, pero bueno
00:31:13
eso ya, ahora mismo, get y sell
00:31:15
me refiero a eso ya ahora mismo, es lo de menos
00:31:17
¿cómo accedo yo a esto? si accedo con el punto, le pongo
00:31:18
eso nos da igual a la misma
00:31:21
lo que nos importa es la estructura
00:31:23
de este objeto
00:31:25
¿nodo es el primer objeto que has creado?
00:31:26
no, nodo es la clase a la que
00:31:30
pertenecen todos y cada uno de estos objetos
00:31:31
o sea, inicio
00:31:33
no, inicio es
00:31:35
como he llamado yo a la referencia
00:31:37
del primero de ellos, luego inicio es un
00:31:40
objeto de clase nodo
00:31:41
¿vale? inicio es un objeto
00:31:43
de clase nodo, pero solo uno
00:31:45
porque la dirección es el primero, esta es la clase
00:31:47
la clase a la que pertenecen todos
00:31:49
¿vale?
00:31:52
bueno, ya tenemos hecha una parte
00:31:54
pero claro, aquí lo que queremos es
00:31:55
aquí lo que queremos
00:31:58
es un objeto
00:32:00
un objeto que pertenezca a una clase
00:32:02
que me permita a mí
00:32:05
hacer las operaciones
00:32:07
de añadir, de eliminar
00:32:08
de todo eso
00:32:10
¿vale? eso es lo que yo necesito
00:32:11
bueno, pues
00:32:14
ese objeto, mi objeto de partida
00:32:16
mi objeto de partida, el objeto que vamos a usar
00:32:18
para insertar, eliminar, para todo
00:32:21
mi objeto de partida es este
00:32:22
es este
00:32:24
que pertenece a la clase
00:32:26
nodo también, ¿verdad?
00:32:29
vale, pues entonces nuestra
00:32:31
estructura de datos, la que ya
00:32:33
vamos a instanciar para trabajar, nuestra
00:32:35
estructura de datos
00:32:37
vamos a llamarla
00:32:37
lista enlazada
00:32:40
¿vale? esta es la
00:32:43
estructura de datos que vamos a crear
00:32:54
Se llama lista enlazada
00:32:56
Y aquí es donde vamos a meter los métodos
00:32:57
Relacionados con
00:32:59
Meter en la lista, sacar
00:33:01
¿Vale? En esta clase
00:33:03
Es donde vamos a meter toda la operativa
00:33:04
De insertar, borrar, consultar
00:33:06
Todo
00:33:09
Va a estar metido en esa clase
00:33:09
Ahí va a estar toda la operativa, lista enlazada
00:33:13
Vale, aquí meteremos, pues repito
00:33:15
Añaden la lista, borra de la lista, etc
00:33:17
Bueno, pues esta lista enlazada
00:33:19
¿Por qué se va a caracterizar?
00:33:22
¿Cuál va a ser su dato
00:33:24
más importante.
00:33:25
¿Cuál va a ser su dato más importante?
00:33:27
La dirección del primero.
00:33:30
Y con la dirección del primero
00:33:33
ya lo tiene todo.
00:33:35
Porque las direcciones de los siguientes están aquí dentro.
00:33:36
Lo acabamos de ver.
00:33:39
Con lo cual, mi estructura lista enlazada,
00:33:40
la única propiedad
00:33:43
que necesita,
00:33:45
lo único que la caracteriza, lo único que importa,
00:33:46
es la dirección del primero.
00:33:48
Lo único. La dirección del primero.
00:33:50
Porque a partir del primero yo puedo
00:33:53
llegar a los otros.
00:33:54
Luego, esta propiedad de inicio, que es la dirección del primero, es la que caracteriza a una lista enlazada concreta.
00:33:57
Esta es la clase lista enlazada, y luego cada lista enlazada concreta, cada objeto de esta,
00:34:06
cada objeto de esta se distinguirán unos de otros de su inicio.
00:34:12
Luego, inicio será la propiedad que caracteriza a cada lista enlazada concreta, cada lista enlazada, su dirección de inicio.
00:34:18
y ahora repito
00:34:24
esta propiedad
00:34:26
inicio, el inicio de mi lista
00:34:28
lo único que me hace a mi falta
00:34:30
para trabajar con la lista
00:34:32
esta propiedad, ¿de qué tipo la pondremos?
00:34:33
¿nodo? ¿de tipo nodo? claro
00:34:41
porque es la dirección del primero
00:34:42
y el primero es un objeto nodo
00:34:44
todos son un objeto nodo
00:34:47
luego esta era de tipo nodo
00:34:48
porque es la dirección de un objeto nodo
00:34:50
y esta también es de tipo nodo
00:34:52
porque es la dirección de un objeto nodo
00:34:54
luego esto en realidad
00:35:01
es las únicas
00:35:02
dos clases, no le hemos metido a operativa
00:35:05
de insertar y de todo eso, son las únicas
00:35:07
dos clases necesarias para
00:35:09
pintar, dibujar, reflejar
00:35:11
la lista enlazada
00:35:13
es decir, la lista enlazada es una
00:35:14
estructura como esta
00:35:17
que se caracteriza
00:35:19
¿por qué?
00:35:21
por la dirección del primero, ya está
00:35:23
porque con la dirección del primero llego a todo
00:35:25
vale
00:35:27
pues yo tengo mi clase lista enlazada
00:35:28
que se caracteriza exclusivamente
00:35:31
por la dirección del primero
00:35:34
y ahora ya la dirección del primero
00:35:35
es de tipo nodo
00:35:38
pues claro, tendré que programar la clase nodo
00:35:39
obviamente, tendré que programar la clase nodo
00:35:42
si la dirección del primero es de tipo nodo
00:35:44
tendré que decir, vale
00:35:46
¿y cada nodo qué tiene dentro?
00:35:47
pues lo estoy diciendo aquí
00:35:50
cada nodo tiene dentro un dato
00:35:51
y la dirección del siguiente
00:35:54
vale, luego esto ya es la descripción de la lista
00:35:56
esto describe completamente lo que es una lista enlazada
00:36:00
lo describe
00:36:02
ahora ya para poder usar
00:36:03
una lista enlazada para meter datos
00:36:06
sacar, consultar, etc
00:36:08
habrá que meter aquí los métodos correspondientes
00:36:09
por ejemplo
00:36:12
en este objeto lista enlazada
00:36:14
que se caracteriza por esta dirección
00:36:15
de inicio, sea la que sea
00:36:18
cada lista tendrá una suya
00:36:19
¿qué método me interesará
00:36:22
a mi programa?
00:36:25
pues el método añadir
00:36:26
al que yo le paso
00:36:28
un string, porque en este caso
00:36:30
si es una lista enlazada de strings
00:36:32
le paso un string
00:36:33
y me lo añade
00:36:35
a la lista, ala, pues este método
00:36:38
querremos programarle, un método
00:36:40
add, al que yo le paso un string
00:36:42
y me lo mete en la lista
00:36:44
¿vale?
00:36:46
ya este método tendrá que
00:36:48
encargarse de crear el dato
00:36:50
colocarlo, hacer los enlaces
00:36:51
etcétera, ¿qué más métodos
00:36:54
nos interesa programar aquí en esta lista?
00:36:56
pues en esta lista
00:36:58
cuya dirección de inicio es esta
00:36:59
cada una tendrá la suya
00:37:01
recordad que eso es una clase, luego ya habrá listas concretas
00:37:03
y cada lista concreta tendrá su propia dirección
00:37:06
pues en esta lista
00:37:08
cuya dirección de inicio es esta
00:37:10
también me interesa programar
00:37:11
un método remove
00:37:14
por ejemplo
00:37:16
al que yo le paso un string
00:37:16
y me elimina
00:37:19
el método, me elimina el nodo
00:37:22
que contenga este dato
00:37:24
por ejemplo
00:37:26
y así podemos añadir
00:37:27
un montón de métodos
00:37:28
el recuperar, ¿qué?
00:37:30
pues yo le paso una posición
00:37:32
y me lo recupera
00:37:34
¿vale?
00:37:37
pues se trata de programar estos métodos
00:37:38
que son más sencillos de lo que parecen
00:37:40
y esto es una lista enlazada
00:37:42
¿vale?
00:37:44
que son las dos
00:37:49
los únicos dos tipos de listas que hay
00:37:50
en Java
00:37:53
la lista basada en Array
00:37:54
y la lista basada en lista enlazada
00:37:56
Venga, vamos a parar aquí un momento, luego ya lo programamos y...
00:37:59
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 11
- Fecha:
- 26 de febrero de 2024 - 18:46
- Visibilidad:
- Público
- Centro:
- IES ROSA CHACEL
- Duración:
- 38′ 05″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 1.22