Saltar navegación

20260202 Colecciones_3_enlazada - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 2 de febrero de 2026 por Raquel G.

1 visualizaciones

Descargar la transcripción

Bueno, pues entonces esto que hemos visto 00:00:00
es como ya sabemos 00:00:11
una clase que ya está hecha 00:00:16
luego no tenemos que usar 00:00:18
nuestro miArrayList chulo 00:00:20
ni miArrayList nada 00:00:22
nada de eso, porque ya hay una clase 00:00:23
que está hecha 00:00:26
que es ArrayList 00:00:28
que está ya 00:00:33
en todas las clases 00:00:35
que distribuye 00:00:38
el JDK 00:00:39
para que nosotros las podamos usar 00:00:41
y que están en la JR 00:00:43
pues esa clase ya existe 00:00:44
¿vale? 00:00:47
que está en particular 00:00:48
dentro 00:00:49
del paquete Java útil 00:00:51
¿vale? 00:00:56
dentro del paquete Java útil 00:00:57
está esta clase 00:00:58
¿cómo pasa? 00:00:59
Vale, pues esto es un ejemplo de colección, ¿vale? Forma parte de lo que en Java entendemos por colecciones, ¿vale? Esto es un ejemplo de lo que llamamos colecciones. 00:01:02
Es un ejemplo 00:01:28
Que está hecho por dentro 00:01:29
Pues como hemos hecho nosotros 00:01:31
Tal cual 00:01:32
Lo que pasa es que, bueno, incorpora 00:01:33
Pues más métodos, más validaciones 00:01:35
Temas de excepciones 00:01:37
Que nosotros no hemos visto todavía 00:01:40
Está más pulida 00:01:41
Nuestra versión está muy cutre, obviamente 00:01:42
Pero es lo mismo, conceptualmente es lo mismo 00:01:45
Es un array, es lo mismo 00:01:47
Pero está más pulido 00:01:49
Pues es el ArrayList 00:01:50
Y forma parte 00:01:51
Y forma parte 00:01:54
de lo que en Java 00:02:00
llamamos colecciones 00:02:02
vale, pues que son las colecciones 00:02:03
las colecciones son 00:02:06
clases que están 00:02:08
pensadas, diseñadas 00:02:11
para 00:02:13
guardar 00:02:17
datos 00:02:18
vale, esas 00:02:20
son las colecciones, clases que están 00:02:28
diseñadas para guardar datos, como 00:02:30
ArrayList 00:02:32
vale, pero ArrayList no es 00:02:32
la única 00:02:36
hay muchas 00:02:36
no hay tampoco tantas 00:02:38
hay unas cuantas 00:02:42
y esencialmente las podemos dividir 00:02:43
en dos tipos 00:02:46
¿vale? 00:02:47
entonces las colecciones en Java 00:02:51
se dividen en dos tipos 00:02:53
tenemos 00:02:59
listas y conjuntos 00:03:01
¿vale? 00:03:11
lo que viene a ser 00:03:13
las list y los set 00:03:14
Eso serían las colecciones, ¿vale? Listas y conjuntos. Vale, hay dos tipos en función de cómo funcionan por debajo, cómo estén implementadas por debajo, ¿vale? Pero ¿en qué se traduce eso de vistas hacia afuera? ¿En qué se traduce? 00:03:18
¿Cuál es la distinción que nosotros vemos desde fuera cuando las usamos? 00:03:37
Pues que las listas tienen orden 00:03:42
Y los conjuntos no tienen orden 00:03:46
Esa es la diferencia entre las listas y los conjuntos 00:03:58
Es decir, una lista tenemos que verla 00:04:03
como una filita 00:04:07
de cosas 00:04:10
en esa filita van los elementos 00:04:11
¿vale? ahí van los elementos 00:04:14
y cada elemento 00:04:16
está en una posición 00:04:18
eso significa que tiene orden, que está en una posición 00:04:19
este elemento está en la cero 00:04:22
y este está en la uno y este está en la dos 00:04:24
los elementos tienen una posición asociada 00:04:26
con tener orden 00:04:28
quizá es más 00:04:30
se entiende mejor el decir 00:04:31
que tienen 00:04:34
posición asociada, ¿vale? 00:04:36
Se entiende mejor así. 00:04:40
Cada elemento está en una posición de la caja. 00:04:49
La 0, la 1, la 2. 00:04:52
Y los elementos ya cada uno es el que sea. 00:04:54
Eso ya nos da igual, ¿vale? 00:04:56
Sin embargo, en un conjunto los elementos 00:04:58
están todos ahí, pum, a mogollón. 00:05:00
Ninguno tiene una posición asociada. 00:05:02
Es un conjunto 00:05:05
de toda la vida. 00:05:05
Cuando metemos un elemento al set 00:05:10
o conjunto, ahí va. 00:05:11
Sin una posición. 00:05:14
¿Vale? Luego, 00:05:16
esto ya se traduce en muchos 00:05:19
pequeños aspectos prácticos, por ejemplo 00:05:22
en las listas 00:05:25
podemos meter dos elementos 00:05:27
iguales, imaginaos que es 00:05:29
de números, yo puedo meter 00:05:31
el 3 y aquí puedo meter 00:05:33
el 3, no pasa nada 00:05:35
porque se distinguen 00:05:37
por la posición, este es 00:05:39
el 3 que está en la posición 0 00:05:41
y este es el 3 que está en la 00:05:42
posición 4 00:05:45
es decir 00:05:46
el que los elementos 00:05:49
de la lista tengan una 00:05:51
posición asociada 00:05:53
implica automáticamente que puede 00:05:54
haber 00:05:57
elementos duplicados 00:05:59
esa es la implicación 00:06:01
puede haber 00:06:03
elementos 00:06:04
duplicados, ¿vale? 00:06:06
vale, en un conjunto 00:06:16
no puede haber elementos duplicados 00:06:18
si yo al conjunto le hago un add 00:06:19
y le meto el 3, por aquí 00:06:21
y ahora 00:06:23
le vuelvo a intentar meter el 3 00:06:26
vuelvo a hacer add de 3 00:06:29
no lo va a meter 00:06:31
porque ya ve que hay uno 00:06:33
entonces no puede meterlo 00:06:35
porque el otro 3 se confundiría 00:06:37
con este, porque no tiene posición asociada 00:06:39
¿y si te avisaría de alguna manera o directamente no lo hace? 00:06:41
no lo hace 00:06:43
luego ya los usos concretos de cada una 00:06:44
ya lo vamos viendo 00:06:46
no puede 00:06:47
haber en un conjunto, no puede haber 00:06:51
dos elementos iguales, porque directamente 00:06:53
el segundo elemento 00:06:55
no lo inserta 00:06:56
ve que hay uno igual, no lo inserta 00:06:58
¿por qué? porque habría una 00:07:00
habría aquí una ambigüedad 00:07:01
yo ya tengo un 3, ese otro 3 00:07:04
¿qué hago con él? es que no lo puedo distinguir del otro 00:07:06
es imposible, no puedo distinguirlo 00:07:08
aquí los puedo distinguir por posición 00:07:10
aquí al no haber posiciones 00:07:12
no puedo distinguirlo, luego no admite 00:07:14
duplicados 00:07:16
esa es la diferencia entre los 00:07:17
sets 00:07:20
y los conjuntos, y las listas 00:07:22
Entonces, en aplicaciones en las cuales la posición para mí no tenga ningún interés, porque yo no necesito duplicados, en las que no tenga ningún interés la posición, yo quiero meter los elementos ahí y ya está, para luego recorrer, a ver los que hay, eliminarlos si quiero, lógicamente. 00:07:24
Si yo quiero simplemente tener un almacén de datos y ese almacén, pues luego ya para recorrerlo, para eliminar uno, eliminar el tres, para insertar otro nuevo, una colección sin más, donde el hecho de que estén en filita no me aporta nada, pues entonces siempre cogeré un set. 00:07:49
¿por qué? porque su implementación 00:08:06
interna es más eficiente 00:08:09
porque aquí 00:08:11
la implementación interna tiene que 00:08:13
gestionar las posiciones 00:08:15
porque cada elemento se caracteriza 00:08:16
en una posición 00:08:19
entonces siempre hay más 00:08:20
complejidad 00:08:23
en la gestión y el uso 00:08:24
de una lista 00:08:27
que de un conjunto, porque no tienes 00:08:29
aquí 00:08:31
no hay que gestionar las posiciones 00:08:32
entonces si que haya duplicados 00:08:34
que estén en filita 00:08:36
no me aporta nada, no es algo 00:08:39
que yo necesite para mi aplicación 00:08:40
por las características de lo que mi aplicación 00:08:42
tiene que hacer, nunca se habían peinado 00:08:44
mientras daba clase, nunca jamás 00:08:46
la primera vez que me ocurre eso 00:08:48
¿cómo va a ser lo siguiente que me pase? 00:08:52
que me peine yo 00:08:55
¿qué otra cosa? 00:08:56
no tienes ninguna necesidad 00:08:56
ya me refiero 00:09:05
bueno, da igual 00:09:08
no de peinarte 00:09:08
sino de tener pelo 00:09:11
quiero decir 00:09:12
bueno, depende 00:09:12
y las gorras 00:09:14
bueno, pues entonces 00:09:16
siempre cogeríamos un 6 00:09:20
¿vale? 00:09:22
los detalles de implementación 00:09:23
y de uso 00:09:24
y de todo eso 00:09:25
ya los veremos 00:09:26
lógicamente 00:09:27
ya los veremos 00:09:27
ahora estamos solamente 00:09:28
describiendo 00:09:29
de qué va el rollo 00:09:32
ya los detalles 00:09:32
de implementación 00:09:33
los ejemplos que hay 00:09:34
ya los iremos viendo 00:09:35
¿vale? 00:09:36
bueno pues tenemos 00:09:37
estos dos tipos 00:09:38
listas y conjuntos 00:09:39
el ArrayList 00:09:40
que hemos hecho nosotros 00:09:42
que es ya digo 00:09:43
similar al ArrayList 00:09:44
que está hecho 00:09:46
porque son iguales 00:09:47
en cuanto a que los dos 00:09:49
tienen un Array por debajo 00:09:49
con los métodos 00:09:50
que incorpora 00:09:52
es una lista 00:09:52
es una lista 00:09:54
porque los elementos tienen una posición 00:09:56
asociada, yo los puedo recuperar por posición 00:09:58
de hecho hemos hecho el get 0 00:10:00
para recuperar el 0, el get 1 para recuperar el 1 00:10:02
luego la clase que hemos hecho 00:10:04
miArrayList tiene una posición 00:10:06
asociada, luego es una lista 00:10:08
¿vale? 00:10:10
no es la única 00:10:13
implementación posible de listas 00:10:14
que tenemos 00:10:16
hay otro tipo 00:10:17
de lista que podemos hacer 00:10:23
luego, vámonos 00:10:25
ahora las listas, ¿vale? 00:10:31
Listas, conjuntos, los dos tipos 00:10:33
de colecciones que tenemos. Vámonos ahora 00:10:35
más en detalle a las listas, ¿vale? 00:10:37
La lista 00:10:42
es un objeto que uno puede instanciar 00:10:42
para meter elementos 00:10:45
en ella y cada elemento con una posición, 00:10:47
¿vale? 00:10:49
Bueno, pues, ¿qué listas tenemos ya hechas en 00:10:50
Java para usar? Tenemos 00:10:52
el ArrayList, que ya 00:10:57
sabemos cómo está hecha por dentro, tiene un 00:11:01
Array genérico, luego tú cuando 00:11:03
lo instancias le das el tipo, o sea, es una clase 00:11:05
como la que hemos hecho nosotros 00:11:07
añade más métodos 00:11:08
lógicamente 00:11:10
para poder hacer más cosas 00:11:11
y gestiona excepciones 00:11:12
que eso no lo hemos gestionado nosotros 00:11:14
pues no sabemos 00:11:15
pero salvo eso 00:11:16
es la que hemos hecho 00:11:17
luego tenemos el ArrayList 00:11:18
que uno instancia 00:11:20
y mete cosas 00:11:21
y cada cosa cae 00:11:22
en una posición sí o sí 00:11:23
pero ¿qué le pasa al ArrayList? 00:11:24
que precisamente 00:11:28
como nosotros sabemos programar 00:11:28
pues sabemos 00:11:30
que cuando uno hace add 00:11:32
se queda tan tranquilo 00:11:33
hecho add 00:11:35
que a gusto, una línea de código 00:11:36
que programa más corto, de corto nada 00:11:38
ese add 00:11:41
ahora, menudo pifostio 00:11:42
que ha hecho él 00:11:45
ese add ha creado 00:11:46
otro array, ha copiado 00:11:49
ha sobrescrito el otro array 00:11:50
en este, este se tira a la basura 00:11:53
o sea, lo que para nosotros se llamara add 00:11:54
del array list, es un montón 00:11:57
de líneas de código y muy 00:11:59
complejas, son muy complejos 00:12:00
crear otro array, borrar otro 00:12:03
O sea, están, en un momento dado, van a estar coexistiendo dos arrays que pueden ser enormes. 00:12:04
Imaginaos que tengo una lista, una array list de 300 posiciones y que voy a añadir el 301. 00:12:11
Pues en un momento dado están coexistiendo dos arrays de 300. 00:12:16
O sea, lo que para mí es hacer add no es trivial. 00:12:21
El método add tiene dentro un montón de cosas. 00:12:25
Y si llamamos a delete, pues ya ni te cuento. 00:12:29
lo que para mí es 00:12:31
oye elimina de la lista el número 00:12:34
lo que para mí es escribir delete usando 00:12:37
este objeto ArrayList que he creado 00:12:40
esto pues es un rollo 00:12:42
porque es llamar aquí un método 00:12:44
que ya sabemos lo que tendrá que hacer 00:12:46
crear otro Array, copiar, ver si es 00:12:48
un rollo 00:12:50
bueno a cambio cuando hagamos get 00:12:51
para recuperar por posición 00:12:55
que bien como nos gusta 00:12:57
el ArrayList porque ya sabemos que lo que 00:13:01
haces, retúr la posición 7. 00:13:03
Magnífico. 00:13:05
Eso está muy bien. 00:13:07
Vale. Pues, ¿qué quiero decir 00:13:09
con todo esto? Que la ArrayList 00:13:11
está estupendo 00:13:13
para recuperar cuando yo quiero 00:13:14
hacer consultas por posición, 00:13:17
pero para insertar y borrar 00:13:19
es un verdadero 00:13:21
rollo, computacionalmente hablando. 00:13:22
¿Vale? Si yo tengo 00:13:26
pocos registros, perdón, pocos 00:13:27
elementos, da un poco igual. Pero yo tengo 00:13:29
muchos elementos, computacionalmente 00:13:31
esto empieza a complicarse. 00:13:33
Hay que crear arrays, romperlos. 00:13:35
Luego, computacionalmente, 00:13:38
cuando ya estamos ejecutando 00:13:40
el programa, los ArrayList 00:13:41
son muy poco eficientes 00:13:43
para inserciones y borrados. 00:13:45
¿Vale? 00:13:48
Para inserciones y borrados son muy poco eficientes. 00:13:48
Entonces, claro, 00:13:54
¿va a ser esta la única 00:13:55
lista que tengamos para guardar 00:13:57
un montón de elementos con orden? 00:13:59
¿Vale? 00:14:00
que ya sé que computacionalmente 00:14:00
es muy costosa para insertar 00:14:03
y borrar, va a ser la única 00:14:05
pues no, afortunadamente 00:14:06
hay gente muy lista que se le ocurren 00:14:08
otras cosas, de almacenar 00:14:11
un montón de datos juntos, todos 00:14:13
del mismo tipo 00:14:15
de tal forma que las inserciones y los borrados 00:14:16
sean mucho más 00:14:19
cómodos que con un array 00:14:21
y esa es la que se llama 00:14:22
la linked list 00:14:25
que son las dos listas que tenemos 00:14:30
¿vale? 00:14:32
Las dos valen para lo mismo 00:14:34
Para tener un montón de datos 00:14:36
Meter dentro datos 00:14:38
Recorrerlos, sacarlos por posición 00:14:40
Eliminarlos, las dos valen para lo mismo 00:14:43
Pero la implementación interna 00:14:45
Es distinta 00:14:47
El ArrayList ya sabemos como está 00:14:48
Hecho por dentro, ya lo sabemos, de hecho lo hemos hecho 00:14:50
Y el ArrayList 00:14:53
¿Cómo está hecho por dentro? 00:14:55
Pues 00:14:59
Qué mal rollo 00:15:02
Pues a ver, pregunto 00:15:03
yo, si os ocurre 00:15:08
no pongáis 00:15:12
a teclar rápido el mensaje 00:15:14
otra manera a nivel 00:15:15
teórico, ahora es una pregunta muy 00:15:19
muy compleja, si uno no lo ha visto antes 00:15:21
el concepto, vale, no es que espera que me digan 00:15:23
uy pues ya me ocurre esto, no, pero bueno 00:15:25
igual os suena el concepto, lo habéis visto antes 00:15:27
o lo que sea, otra forma 00:15:29
de guardar un montón de datos 00:15:31
porque este es nuestro problema, imaginaos que tenemos 00:15:33
alumnos que guardar 00:15:35
mi alumno con tres propiedades 00:15:37
mi alumno 00:15:39
mi alumno 00:15:40
mi alumno 00:15:42
los queremos guardar todos juntos 00:15:45
bajo una única referencia 00:15:47
que esa es la idea 00:15:49
para luego poder tratarlos conjuntamente 00:15:49
para recorrer 00:15:51
una de las ideas ya está 00:15:52
ya está vista 00:15:55
ya la conocemos 00:15:56
que es ala todos a un array 00:15:57
vale una de las ideas ya está 00:15:58
todos a un array 00:16:00
ahí están todos juntitos 00:16:02
bajo la referencia de mi objeto array 00:16:04
ala todos ahí 00:16:07
esa solución 00:16:08
es la del array list 00:16:09
¿Vale? Todos a la raíz 00:16:11
Ahí están 00:16:14
Ahí recorro, meto uno nuevo 00:16:15
Lo que quiera 00:16:18
Pero esta solución, pues ya hemos dicho 00:16:19
Que es costosa 00:16:22
Para inserciones y borrados 00:16:23
Entonces, ahora 00:16:25
Pregunto yo 00:16:30
¿Se nos ocurriría otra manera de guardar 00:16:31
Un montón de datos como estos 00:16:34
Bajo una única referencia 00:16:36
Que me permita a mí 00:16:38
Bajo esa referencia 00:16:39
objeto, como lo queréis llamar, referencia 00:16:41
objeto, tenerlos todos ahí accesibles 00:16:43
para recorrerlos, para meter 00:16:45
uno nuevo, una pregunta 00:16:47
complicada, ¿verdad? A ver, es una 00:16:52
pregunta complicada 00:16:57
la idea de fondo 00:16:58
es el concepto 00:17:01
de informática de toda la vida 00:17:04
que es el de una lista enlazada 00:17:05
es decir 00:17:08
¿qué idea es la más natural? 00:17:09
¿vale? pues que cada uno 00:17:12
o sea, que tenga yo 00:17:13
aquí mi objeto. Esta es mi referencia. 00:17:15
Debajo de esta es de la que 00:17:20
quiero que cuelguen todos. A través de 00:17:21
ella quiero poder acceder a todos, como la de la 00:17:23
array, que a través de la referencia de la array accedo a 00:17:25
todos. Pues a través de esta 00:17:27
quiero poder acceder a 00:17:29
todos. Vale, pues ¿cómo podemos 00:17:31
hacer? Yo 00:17:33
accedo al primero, 00:17:35
que mi referencia me lleve al primero 00:17:39
y cada uno que lleve 00:17:41
de la manita al siguiente. 00:17:43
Podemos llevar, 00:17:46
sacar de excursión a los niños de primero de infantil 00:17:46
los podemos meter a todos 00:17:50
en el autobús, pum, y van todos en el autobús 00:17:51
o los podemos 00:17:54
o podemos coger al primero 00:17:55
y que el primero dé de la mano al segundo y vayan todos de la manita 00:17:57
y nosotros llevamos al primero 00:18:00
o los llevamos en un autobús 00:18:01
o llevamos de la mano al primero y cada uno lleva de la mano 00:18:03
al siguiente 00:18:05
y si están bien educados no se van a soltar 00:18:06
entonces van a llegar todos a su destino 00:18:09
¿que yo quiero 00:18:11
ver cómo está el quinto? 00:18:14
pues hombre es un rollo, tengo que pasar 00:18:15
por uno, por otro, por otro hasta que llego al quinto 00:18:17
¿vale? pero desde luego están 00:18:19
todos ahí accesibles, todos accesibles 00:18:21
todos los dados de la manita 00:18:23
van a llegar todos a su destino 00:18:24
correctamente, pues aquí lo mismo 00:18:26
cada objeto 00:18:29
que se envuelva en un objeto 00:18:30
joder 00:18:35
que asustos 00:18:36
que se envuelva en un objeto 00:18:38
que además de sus propiedades 00:18:40
tenga la referencia del siguiente 00:18:42
Ahora este 00:18:45
A su vez 00:18:49
Tiene la referencia del siguiente 00:18:50
Este a su vez 00:18:53
Tiene la referencia del siguiente 00:18:56
Este a su vez 00:18:59
Tiene la referencia del siguiente 00:19:01
Como él es el último 00:19:03
Él su referencia esta del siguiente 00:19:04
Ya apunta a mí 00:19:07
Pues así los tengo a todos 00:19:09
Perfectamente accesibles 00:19:12
Desde esta 00:19:14
pero es que yo no sé por qué se me mueve con esto 00:19:15
a veces y a veces no, bueno no lo sé 00:19:21
podría ser, no lo sé 00:19:23
igual se roza 00:19:27
esto y no me doy cuenta 00:19:30
vale, pues así podemos perfectamente 00:19:31
ya están todos 00:19:34
accesibles desde aquí 00:19:36
¿qué ventaja tengo con esta estructura? 00:19:37
que insertar uno nuevo 00:19:43
es facilísimo 00:19:45
insertar uno nuevo es llegar y darse de la mano 00:19:47
ya está, no tiene que hacer nada más 00:19:50
insertar uno nuevo es 00:19:52
tengo este objeto, si yo lo quiero meter en un array 00:19:53
tengo que hacerme un autobús 00:19:57
es como cambiarlos, si llega uno 00:19:58
la filita de niños, uno, hostia 00:20:00
que este llega tarde, pues se da la mano 00:20:02
y se acabó, vale 00:20:04
pero si llega uno y mi autobús 00:20:06
era para 20 y me ha llegado el niño 00:20:08
21, tengo que contratar un autobús nuevo 00:20:10
cambiarlos a todos 00:20:13
montar al 21, pues un rollo 00:20:14
sin embargo así me llega uno nuevo 00:20:17
uy que fácil, pues tú dejas de apuntar a null 00:20:19
y empiezas a apuntar al nuevo y ya está 00:20:22
luego acoger elementos nuevos en esta estructura 00:20:25
no cuesta nada, se trata de hacer una asignación 00:20:28
de una referencia, se acabó 00:20:32
no hay que crear nada, destruir nada 00:20:34
luego esta estructura es muchísimo más eficiente 00:20:36
para insertar elementos nuevos 00:20:40
que el ArrayList 00:20:44
el ArrayList, ya sabemos lo que implica 00:20:45
¿que quiero yo eliminar un elemento? 00:20:47
facilísimo 00:20:52
no tengo que crearme un autobús 00:20:53
nuevo con una posición menos 00:20:55
moverlos a todos, dejar fuera 00:20:57
el niño que me sobra 00:20:59
no, aquí el niño que me sobra 00:21:00
pues se va afuera 00:21:03
o sea, este enlace 00:21:05
y este cambia de mano 00:21:07
este le da la mano 00:21:09
a uno, le da la mano al de atrás 00:21:11
ya está, se trata de darle la mano al otro 00:21:12
y el que se ha quedado fuera sin nadie que le dé la mano 00:21:15
pues ya se lo llevará al recolector de basura 00:21:18
luego 00:21:20
inserciones y borrados 00:21:22
computacionalmente 00:21:24
inmejorables 00:21:26
con una lista enlazada 00:21:27
¿pero es solo para objetos? 00:21:29
¿o sirve para otros servicios? 00:21:31
no, no, para objetos también 00:21:33
igual que la raíz 00:21:35
claro, porque tiene que tener 00:21:36
no, no, te ha preguntado 00:21:39
si sirve para otros servicios 00:21:41
Bueno, si lo envuelves en el integer, sí 00:21:42
Las colecciones solamente pueden tener datos objeto 00:21:45
¿Vale? Datos objeto 00:21:48
Pero si tú quieres números, pues integer 00:21:50
¿Vale? De hecho 00:21:52
Normalmente 00:21:53
A partir de cierto momento, ya tú no vas a ver 00:21:55
En las aplicaciones 00:21:58
Tipos primitivos como indavel, sueltos 00:21:59
Vas a ver siempre el envolvente 00:22:01
Porque computacionalmente te da igual, lo usas igual 00:22:03
Y es más flexible 00:22:06
Por si en un momento dado tienes que meterlo 00:22:08
En una colección, por ejemplo 00:22:09
¿Vale? 00:22:11
Te va a ser más habitual en aplicaciones grandes 00:22:13
Ver siempre el envolvente que ver el primitivo 00:22:15
¿Vale? 00:22:18
Entonces en una lista enlazada 00:22:19
Que sería el linked list 00:22:21
Insertar y eliminar 00:22:23
Facilísimo, que era justo lo que era complicado 00:22:27
En el array list, justo lo que era complicado 00:22:30
Pero ostras 00:22:32
Recorrer, es decir 00:22:35
Recuperar un elemento 00:22:37
consultar 00:22:39
un elemento 00:22:42
pues en el ArrayList era inmediato 00:22:43
era un retún get el que fuera 00:22:45
porque el ArrayList es que ya 00:22:47
al ser un Array tú vas a la posición 00:22:50
y vas tal cual, es de acceso directo 00:22:51
a la posición en el Array, tal cual 00:22:53
tú tienes tus corchetes para acceder 00:22:55
a la posición 00:22:57
pero este, aquí no hay corchetes 00:22:58
para acceder, si yo quiero ver 00:23:02
elemento en la posición 3, yo que sé 00:23:03
este por ejemplo 00:23:06
mi referencia apunta al primero solo 00:23:06
el que manda, que es la referencia 00:23:10
que está en el main, apunta al primero 00:23:12
luego del primero tengo que ir al segundo 00:23:14
y del segundo al tercero, ah, que ya ha llegado 00:23:16
luego 00:23:18
la recuperación por posición, el get 00:23:20
es la que es 00:23:22
pesada, la que tarda 00:23:24
partimos del primero siempre 00:23:25
partimos del primero y del primero hay que ir navegando 00:23:28
hasta que lleguemos al que queremos ver 00:23:30
luego son complementarias 00:23:32
no es que una sea mejor que otra 00:23:35
ArrayList 00:23:36
está basada en un array que es la mejor estructura 00:23:38
que hay, pero a partir 00:23:41
de cierto tamaño 00:23:43
las inserciones y borrados cuestan 00:23:44
mucho 00:23:47
sin embargo en un LinkedList 00:23:47
si vamos a hacer muchas inserciones y borrados 00:23:50
y mi aplicación sobre todo 00:23:53
sus casos de uso, sus servicios 00:23:54
son de insertar y borrar 00:23:57
son sobre todo eso 00:23:59
y tengo ya una cantidad de datos respetable 00:24:01
pues un LinkedList 00:24:03
si mi aplicación 00:24:04
tiene los datos de partida ya 00:24:07
construidos y lo único 00:24:09
que va a hacer, va a ser consultarlos 00:24:11
pues hombre, estar 00:24:13
consultando todo el rato en esta es un rollo 00:24:15
un ArrayList mejor 00:24:17
en cualquier caso 00:24:18
para una cantidad de datos manejable 00:24:21
pequeñita 00:24:22
pues por defecto siempre usaríamos un ArrayList 00:24:24
porque es un Array que ya sabemos que es muy 00:24:27
robusto 00:24:28
es la estructura nativa 00:24:30
de Java, de hecho el Array 00:24:32
para una estructura de datos 00:24:33
para una colección un poquito más anchota 00:24:36
más grandota, que yo preveo 00:24:38
que voy a tener muchos datos 00:24:40
pues esta ya 00:24:41
empieza a ser más 00:24:43
eficiente 00:24:45
pero las dos valen para lo mismo 00:24:46
para guardar datos con posición 00:24:53
y las dos ofrecen los mismos métodos 00:24:54
con matices 00:24:58
este ofrece algunos más porque este te permite 00:24:59
simular una pila y una cola 00:25:01
pero eso ya lo dejamos para después 00:25:03
pero te ofrecen lo mismo 00:25:05
las mismas posibilidades, que es insertar 00:25:07
uno nuevo con el add, recuperar 00:25:09
con el get, borrar con el 00:25:11
remove, te permiten lo mismo 00:25:13
¿vale? pero están construidas por dentro de forma 00:25:14
distinta y eso hace que 00:25:17
su funcionamiento sea distinto 00:25:19
¿entendido? 00:25:21
pues 00:25:28
dicho esto 00:25:29
si tuvierais que hacer mi linked list 00:25:31
no la chula, mi linked list 00:25:42
sin chula, genérica 00:25:45
desde ya, ahorrémonos tiempo 00:25:56
genérica para que sea cualquier tipo de dato 00:25:58
vale, pues como la programaríamos 00:26:01
como programaríamos la lista enlazada 00:26:06
es la única colección 00:26:08
que vamos a programar 00:26:10
no va en los conjuntos y esos 00:26:12
ya no, son demasiado complejos 00:26:14
pero esto es una lista enlazada que junto con un árbol 00:26:15
binario son las estructuras básicas para 00:26:18
cualquier informático 00:26:20
o cualquiera que quiera ser programador 00:26:22
vale, pues si yo quiero programar este concepto que he hecho aquí 00:26:23
esta sería 00:26:26
mi referencia que tiene 00:26:27
pues el inicio, ¿vale? 00:26:29
Sí, yo creo que es que roza con esto 00:26:33
cuando se mueve. 00:26:35
Vale, pues entonces 00:26:37
¿esto me apunta 00:26:41
directamente a un objeto 00:26:44
de tipo T? 00:26:45
No. 00:26:48
Esto me apunta a un objeto 00:26:49
que lo envuelve un poquito 00:26:51
más complejo, porque 00:26:53
además de las propiedades de T 00:26:55
tiene que tener 00:26:57
la dirección del 00:26:59
siguiente. 00:27:01
y este ya 00:27:03
me apuntará 00:27:13
a otro objeto que no es 00:27:15
directamente un objeto de tipo T 00:27:17
porque además tendrá 00:27:19
una propiedad 00:27:23
siguiente 00:27:25
luego para programar esto 00:27:26
me aparece aquí 00:27:29
adiós 00:27:31
cuando los funcionarios se nos calbolen 00:27:34
es que los tenemos aquí 00:27:40
me aparece 00:27:40
esa clase 00:27:44
que esta clase 00:27:44
es una clase, podemos llamarla 00:27:47
nodo, ¿vale? 00:27:49
que tendrá dentro dos cosas 00:27:53
el objeto de tipo T 00:27:55
y un objeto 00:27:57
siguiente que a donde te apunta 00:27:59
a su vez a un nodo 00:28:01
luego vamos a tener que hacer esta clase 00:28:03
la hacemos ahora, y ahora 00:28:04
mi lista, mi objeto 00:28:07
lista, el objeto que yo voy a instanciar 00:28:09
para meter los elementos 00:28:11
en la lista enlazada, ¿por qué se va a 00:28:13
caracterizar. Se va a caracterizar 00:28:15
exclusivamente por la dirección 00:28:17
de un 00:28:19
objeto de tipo T, de un nodo. 00:28:21
Este nodo 00:28:24
como también va a depender de T, porque esto 00:28:25
es T, también va a ser un nodo genérico. 00:28:27
Entonces, mi lista enlazada 00:28:29
se va a caracterizar 00:28:31
exclusivamente por esto. 00:28:34
Por la dirección del primer nodo. 00:28:40
Ya está. 00:28:43
Por eso se va a caracterizar 00:28:45
mi lista enlazada. Por la dirección 00:28:46
del primero, recordad que esto es un objeto 00:28:49
de nodo T, no necesita nada más 00:28:50
para caracterizarse mi lista 00:28:52
mi lista va a ser la dirección del primero 00:28:54
ya está 00:28:57
bueno, dirección de objeto es que es lo mismo 00:28:58
o sea, es el primero 00:29:01
el objeto, cuando a lo que llamamos 00:29:02
objeto, es a su dirección en memoria 00:29:05
vale, lo que pasa es que 00:29:06
aquí nos falta 00:29:09
nos falta declarar 00:29:09
esta clase 00:29:13
nos falta 00:29:13
bueno, pues no pasa nada 00:29:15
¿cómo será la clase 00:29:17
nodo T? 00:29:23
clase nodo 00:29:27
será genérica 00:29:29
su primera propiedad 00:29:29
será de tipo T 00:29:35
es el dato en sí 00:29:36
esta será su primera propiedad 00:29:37
porque recordad que cada nodo de la lista 00:29:43
tiene el dato de tipo T 00:29:47
y la dirección del siguiente 00:29:49
la dirección del siguiente 00:29:50
es un objeto de tipo nodo 00:29:53
T, porque el siguiente es otro nodo. 00:29:55
Pues estas son las dos clases 00:30:02
involucradas 00:30:03
en la lista enlazada, estas dos. 00:30:04
La clase que te dice 00:30:08
lo que hay en cada nodo, 00:30:10
que es el propio dato, 00:30:12
el propio dato y el objeto siguiente, 00:30:13
el objeto siguiente, 00:30:16
el propio dato y el objeto siguiente, 00:30:18
que es este, 00:30:20
la lista en sí, que la lista en sí 00:30:23
es el primer elemento, 00:30:26
o la dirección del primero. 00:30:28
Recordad que un objeto y su dirección es lo mismo. 00:30:30
O sea, un objeto, en realidad, 00:30:36
cuando escribimos el nombre de un objeto en Java, 00:30:37
estamos escribiendo, en realidad, 00:30:41
su dirección de memoria. 00:30:46
Entonces, Java, cuando ve el nombre de un objeto escrito 00:30:48
y entra dentro, sabe que lo que hay ahí es la dirección 00:30:50
y a través de la dirección, pues llega ya el objeto. 00:30:53
vale, bueno pues esta es 00:30:55
la dirección del primer nodo 00:30:58
y ahora ya 00:31:00
cada nodo tiene el propio 00:31:02
dato y la dirección del 00:31:04
siguiente, vale, el propio objeto 00:31:06
siguiente, son las únicas 00:31:08
clases involucradas 00:31:10
y ahora aquí 00:31:11
habrá que hacer los métodos 00:31:15
correspondientes 00:31:18
public void 00:31:19
add del dato 00:31:24
t, claro aquí 00:31:28
¿Y qué pasa? Que aquí el problema 00:31:31
ya no es tan sencillo. Añadir 00:31:33
a la lista, ahora 00:31:35
ya implica mover 00:31:37
los enlaces y hacer las cosas 00:31:39
que hagan falta, ¿vale? 00:31:41
Esto no es 00:31:48
como lo del array. 00:31:48
Entonces, vamos a hacer el de añadir, por ejemplo. 00:31:50
¿Cómo lo podríamos hacer? 00:31:52
El de, ¿vale? El método de añadir 00:31:54
a la lista. Vamos a hacer 00:31:56
ese, más o menos para intuir la idea, 00:31:58
pero tampoco vamos a hacerlos todos 00:32:00
para no 00:32:02
nos volváis demasiado locos 00:32:03
vale, pues como haríamos el método de añadir 00:32:05
voy a borrar aquí para hacer un poco de hueco 00:32:08
vale, método de añadir 00:32:10
a ver 00:32:18
pensad que nuestra lista 00:32:19
es esta, tenemos inicio 00:32:22
inicio 00:32:24
que es este, que me lleva 00:32:32
el primero que tiene T 00:32:36
el dato de tipo T 00:32:38
siguiente 00:32:40
que me lleva este 00:32:41
y este 00:32:44
imaginaos que me lleva a luz 00:32:46
es private y todo, ¿no? 00:32:48
sí, lo que pasa es que bueno 00:32:50
lo estoy, vamos, por no hacer 00:32:51
la línea muy larga, estoy quitando el 00:32:54
modificador y, ¿vale? 00:32:56
entonces hay una forma muy fácil de añadir 00:32:58
si cada vez que añadamos 00:33:00
en lugar de añadir por la cola 00:33:02
colamos aquí al principio 00:33:03
ahí el método add se hace muy sencillo 00:33:06
en lugar de dar la mano al último 00:33:08
nos colamos en el primero 00:33:10
hay una forma muy sencilla de hacer ese método 00:33:12
que sería, este es el nuevo, que tengo que añadir 00:33:14
el nuevo, con su siguiente 00:33:17
que inicialmente no apuntará a nada 00:33:20
inicialmente esto será un no 00:33:22
vale, pues hay una forma muy sencilla 00:33:23
de colarlo 00:33:26
al principio, que es 00:33:27
a este elemento 00:33:30
punto siguiente, a su propiedad 00:33:32
siguiente, a este nodo 00:33:34
punto siguiente 00:33:36
vamos a asignarle lo que tenga inicio 00:33:38
Sería la primera sentencia, ¿vale? Que sería este. T dato. Primero, ¿qué nos haríamos? Nos haríamos un nodo T, ¿vale? Aquí le vamos a meter un nuevo dato. Primero construimos un nodo con él. 00:33:40
nodo T, nodo 00:33:56
ahora lo escribimos ahí que se va a ver mejor 00:34:00
igual 00:34:02
nos hacemos un nuevo 00:34:03
nodo T 00:34:06
¿vale? 00:34:07
pasándole el dato que fuera 00:34:10
¿vale? es decir 00:34:12
aunque lo escriba faltándome cosas 00:34:16
lo que importa es la idea, ahí me pasan 00:34:17
un dato, me pasan esto 00:34:20
me pasan esto 00:34:21
primero que hace el método 00:34:23
construye con él un nodo 00:34:25
es decir, hace un nodo 00:34:27
donde pone aquí el dato 00:34:30
y aquí lo pone a nudo 00:34:31
es lo primero que hace, se construye un nodo nuevo 00:34:33
para colar en la lista 00:34:36
se construye un nodo nuevo, vale, ya he metido 00:34:37
el dato ahí, vale 00:34:40
ahora que hacemos 00:34:42
a inicio 00:34:43
perdón 00:34:46
que el siguiente 00:34:47
nodo de este sea el que tenga 00:34:50
inicio, luego 00:34:52
si es 00:34:56
podríamos hacer 00:34:58
nodo punto siguiente 00:34:59
igual a inicio 00:35:04
¿qué estaríamos 00:35:05
consiguiendo con nodo punto siguiente 00:35:08
igual a inicio? pues estaríamos consiguiendo hacer este enlace 00:35:09
ese enlace ya lo tendríamos 00:35:12
este es nodo 00:35:15
el que acabamos de hacer 00:35:17
pues al hacer nodo punto siguiente 00:35:18
igual a inicio 00:35:21
este deja de apuntar a null y empieza a apuntar 00:35:23
donde apunta inicio, ese enlace ya está 00:35:26
¿y qué nos falta? 00:35:28
Pues hacer inicio 00:35:29
Igual a nodo 00:35:32
Al hacer inicio igual a nodo 00:35:33
Inicio deja de apuntar a este 00:35:37
Y pasa a apuntar a este de aquí 00:35:39
Luego con 00:35:42
Dos sentencias 00:35:46
Hemos metido este dato 00:35:48
En la lista enlazada 00:35:51
¿Vale? 00:35:53
Hemos metido el dato en la lista enlazada 00:35:55
Mucho más fácil que en un array 00:35:57
Este es el código para meter en la lista enlazada 00:35:59
mucho más sencillo que el array 00:36:03
lo único que le hemos colado al principio 00:36:04
porque para ponerlo al final no es tan fácil 00:36:09
hay que ir avanzando 00:36:11
pero colarlo al principio 00:36:12
este es el método que el linked list original 00:36:14
lo llama, no lo llama 00:36:19
lo llama add first 00:36:21
que es añade al principio 00:36:23
porque el add normal 00:36:25
lo usa para añadir al final 00:36:27
que habría que hacerlo de otra manera, claro 00:36:29
pero añadir al principio es tan sencillo 00:36:31
como esto, entonces es un buen ejemplo 00:36:33
para ver que insertar 00:36:35
en una lista enlazada es mucho más fácil 00:36:37
que insertar en un array 00:36:39
no es sencillo 00:36:40
la idea de lista enlazada 00:37:00
no es sencilla tampoco, porque es meter un objeto 00:37:03
en un nodo, ese nodo 00:37:05
añade la dirección del siguiente objeto 00:37:07
de la lista y todo eso 00:37:09
está oculto 00:37:10
el que usa mi linked list 00:37:12
instancia un objeto, mi linked list para un tipo 00:37:14
y luego llama add, llama lo que sea 00:37:17
y el que lo usa ni ve nodo ni ve nada 00:37:19
Más o menos procesado 00:37:21
Es que yo lo que no entiendo 00:37:25
O sea, tú en el nodo 00:37:28
O sea, cuando haces el new node 00:37:29
Sí, me creo un objeto 00:37:31
Nodo nuevo donde meto el dato 00:37:33
Vale, metes el dato 00:37:35
Y a la dirección siguiente la pongo a null por ahora 00:37:36
Luego ya se la cambio 00:37:39
Para que apunte aquí 00:37:41
Y luego ya inicio 00:37:43
La hago llevar aquí arriba 00:37:46
Pero es que el siguiente 00:37:47
Está apuntando al inicio, no está apuntando a la nueva 00:37:49
O sea, primero es nudo 00:37:51
Pero luego le pones que apunte inicio 00:37:53
No, no le pongo que apunte inicio 00:37:55
Le pongo que apunte a donde apunta inicio 00:37:57
Esta sentencia 00:37:59
Significa 00:38:01
Que nodo siguiente 00:38:03
Apunte a donde apunta inicio 00:38:05
E inicio donde apunta 00:38:08
Aquí 00:38:10
No, pero 00:38:10
Tú en la clase nodo 00:38:11
Tienes dos atributos 00:38:14
Sí, el dato 00:38:16
Y la dirección del siguiente 00:38:18
o el objeto siguiente 00:38:20
pero claro, ahí tú 00:38:22
entonces el siguiente 00:38:24
o sea, en el nodo nuevo que has creado 00:38:26
le estás diciendo 00:38:29
que su atributo siguiente sea inicio 00:38:30
claro, e inicio es 00:38:33
esto 00:38:35
inicio es a quien apunto yo 00:38:35
claro, inicio es 00:38:39
e inicio apunta aquí 00:38:41
entonces si yo digo que 00:38:42
nodo siguiente igual a inicio, estoy diciendo que 00:38:44
nodo siguiente igual a esta misma flecha 00:38:46
le estoy diciendo, oye, tu flecha 00:38:49
que sea esta flecha 00:38:51
y ahora la flecha inicio 00:38:52
que deje de ser esta, para ahora ser 00:38:57
la flecha 00:38:59
que te lleva 00:39:01
el objeto nuevo 00:39:02
vale, pero no es fácil 00:39:04
entender un poco lo de la 00:39:07
referencia, o sea, la dirección de objeto 00:39:09
objeto 00:39:11
pero bueno, sí que deberíais dedicar 00:39:11
tiempo a pensarlo un poco para tener claves 00:39:15
porque muchos de los errores 00:39:17
de ejecución que salen 00:39:18
es porque uno a veces no tiene 00:39:20
simplemente la idea 00:39:22
de que es realmente un objeto 00:39:24
¿vale? 00:39:26
entonces tenéis que entender muy bien 00:39:29
las bases de todo, porque 00:39:30
programar no es hago código y llamo a métodos 00:39:31
no, es tratar de hacer aplicaciones 00:39:34
que funcionen 00:39:36
y para que las aplicaciones hagan lo que tienen que hacer 00:39:37
hay que entender la esencia 00:39:40
de lo que 00:39:42
programa, ¿vale? 00:39:43
si escribir líneas de código es fácil 00:39:45
que hagan exactamente lo que realmente 00:39:47
se espera que hagan, ya no es tan fácil 00:39:50
¿Quieres aprender otra cosa? 00:39:51
Lo voy a poner 00:39:55
Bueno, más o menos 00:39:56
¿Qué significa? 00:39:58
Si queremos hacer otro node 00:40:03
Sí, otro objeto 00:40:05
O sea, otro add, llamar a add otra vez 00:40:09
Sí, llamar a add otra vez 00:40:12
Pues se colaría aquí 00:40:13
se llama otro add, pues ese otro add 00:40:15
empezaría a apuntar a donde apuntaba 00:40:18
inicio y lo apunta a este 00:40:20
inicio empezaría a apuntar a este nuevo 00:40:22
cada vez que yo haga 00:40:25
un add, se cuela delante 00:40:28
del que había 00:40:29
pensaba que 00:40:30
iba al último 00:40:33
no, no, no, claro 00:40:34
podríamos hacer el método add last 00:40:37
añadir al final, pero este no es tan fácil 00:40:40
pero hay que ir avanzando, entonces la operación de avance 00:40:41
la vamos a ver ahora con el get 00:40:43
porque nos faltaría un recuperar 00:40:44
entonces, a ver 00:40:46
vamos a, si lo programamos 00:41:03
aquí igual se ve un poco mejor 00:41:05
ahora ya, escrito bien en código 00:41:07
vale, me voy a hacer otro paquete 00:41:09
que se llame ahora 00:41:15
linked list para 00:41:17
las clases relacionadas con esto 00:41:18
linked list, vale 00:41:21
primero vamos a hacernos la clase nodo 00:41:27
la clase nodo es la que tiene el dato 00:41:30
junto con la dirección del siguiente 00:41:35
la clase nodo es la que envuelve al dato 00:41:38
entonces la clase nodo tiene 00:41:40
el dato 00:41:42
que será genérico 00:41:44
de un tipo el que sea 00:41:45
luego la clase nodo depende de t 00:41:48
y aquí está el dato 00:41:50
pero el objeto nodo 00:41:53
el objeto que pertenece a esa clase 00:41:55
el nodo, también tiene que tener 00:41:57
la dirección del siguiente 00:42:00
elemento. Y el siguiente 00:42:02
elemento es un nodo a su vez. 00:42:04
Llamémosle siguiente, por ejemplo. 00:42:12
Vale. Vamos a hacernos un constructor 00:42:16
que nos va a ir muy bien. Construir un nodo 00:42:18
con un dato en particular, poniendo 00:42:20
la dirección del siguiente a nulo. 00:42:22
Vamos a hacernos un constructor 00:42:24
para el nodo. 00:42:26
Como al constructor solo le va a llamar 00:42:32
mi linked list, esto ni lo ve el main 00:42:34
ni lo ve nada, no lo voy a hacer public 00:42:36
el constructor 00:42:38
nodo 00:42:39
a ver, t dato 00:42:42
this.dato 00:42:46
igual a 00:42:52
dato 00:42:53
y siguiente 00:42:54
igual a nulo 00:42:57
vale, este constructor pues me va a ser útil 00:42:58
me crea un nodo 00:43:01
por ahora que tiene el dato dentro pero 00:43:03
no está enlazado con nadie 00:43:05
enlazarlo ya será un problema 00:43:06
de la linked list 00:43:09
Sí, ya sería null, pero bueno, para que quede 00:43:11
más claro. Cualquier objeto 00:43:15
si no lo inicializamos específicamente 00:43:17
se queda inicializado como null. 00:43:19
¿Vale? Entonces 00:43:21
no le voy a poner ni get ni set 00:43:23
voy a quitarle los 00:43:27
private, porque esta clase 00:43:29
va a ir asociada a la otra 00:43:31
y quiero que se comuniquen fácilmente entre sí 00:43:33
esto no es para 00:43:35
ser accedida desde la main 00:43:37
ni nada de eso, esto no es una entidad 00:43:39
es una clase operativa de trabajo 00:43:41
entonces vamos a dejar el nodo así 00:43:43
vale, ahora nos vamos a hacer 00:43:44
ahora ya sí la lista enlazada 00:43:47
mi linked list 00:43:49
la lista enlazada 00:43:58
esta 00:44:01
solo necesita, solo se caracteriza 00:44:02
por la dirección del primer elemento 00:44:06
que será de nodo T 00:44:10
luego al depender 00:44:12
de T 00:44:16
la estoy haciendo dependiente de t por aquí 00:44:16
pues entonces va a ser genérica ya también 00:44:20
también va a ser genérica 00:44:21
vale 00:44:23
y ahora 00:44:25
vamos a hacerle el método 00:44:34
al que yo le paso un dato 00:44:36
de tipo t, vale 00:44:45
pues cada vez que queramos añadir algo 00:44:50
at first a la lista 00:44:52
que yo instancie 00:44:54
¿qué habrá que hacer? pues 00:44:55
se crea un nodo 00:44:58
con ese dato 00:44:59
¿vale? 00:45:09
creo un nodo con ese dato 00:45:14
por ahora está desenlazado 00:45:15
el nodo con ese dato 00:45:18
está desenlazado 00:45:20
¿vale? 00:45:21
así 00:45:25
de nodo T, puedo poner aquí la T o no 00:45:25
esto es como lo que hemos visto antes 00:45:32
creo un nodo 00:45:33
con ese dato 00:45:35
¿vale? 00:45:37
ahora, ¿qué es lo que hacemos? 00:45:38
el siguiente 00:45:41
de ese nodo que sea 00:45:42
el primero de la lista 00:45:44
es decir, a donde apunte inicio 00:45:46
el primero de la lista 00:45:49
y ahora una vez que el siguiente de ese nodo 00:45:50
es el primero de la lista 00:45:55
ahora que el primero de la lista 00:45:56
pase a ser este nodo 00:45:58
que yo he hecho 00:46:01
y ya está, se acabó el método 00:46:01
se acabó el método 00:46:03
vamos a hacer un main para ver al menos 00:46:10
que no salen errores, aunque no vamos a poder todavía 00:46:13
comprobar si lo ha metido porque no tenemos un get 00:46:15
pero vamos a ver por lo menos 00:46:18
si no nos saltan errores 00:46:22
¿Cómo lo usaríamos esto ahora en nuestro main? 00:46:23
Pues yo me quiero hacer una lista enlazada 00:46:30
Para meter, pues yo que sé 00:46:32
Cadenas, venga 00:46:33
Pues me hago mi lista enlazada 00:46:35
Quiero meter cadenas 00:46:39
Pues que sea de stream 00:46:41
Ahí la tengo 00:46:42
Mi lista enlazada 00:46:55
Tal y cual la he creado 00:46:56
Ahora mismo 00:47:00
Se ha creado una, mi linked list 00:47:02
Con inicio apuntando a null 00:47:04
La lista está vacía 00:47:06
Inicio, apunta, anul 00:47:08
Lista muy vacía 00:47:09
Vamos a hacer un par de add 00:47:10
Comprobar que no da errores 00:47:12
Y nos vamos 00:47:12
Vale, vamos a usarla 00:47:13
Cadenas.addFirst 00:47:15
Hola 00:47:18
Cadenas.addFirst 00:47:19
Adiós 00:47:24
Ahora mismo 00:47:27
No puedo hacer más con la lista 00:47:30
Solo puedo meter 00:47:32
No puedo comprobar con get 00:47:33
No puedo borrar 00:47:35
Porque no lo he hecho 00:47:36
Porque no lo he hecho 00:47:37
Solamente puedo hacer esto 00:47:38
es decir, no podemos comprobar si lo ha metido 00:47:40
realmente, pero no tenemos un get, pero al menos vamos a ver 00:47:43
si nos da errores, excepciones 00:47:45
de ejecución, porque algo ya hayamos programado mal 00:47:47
o no, vale 00:47:49
no da errores, con lo cual tiene toda la pinta 00:47:56
de que, a ver, programado, está bien 00:47:59
programado, pero 00:48:01
necesitaríamos tener un método get 00:48:02
para comprobar, a ver si 00:48:05
lo ha metido, necesitaríamos tener esto 00:48:07
desde igual a cero, mientras si 00:48:09
sea menor que 00:48:11
cadenas.size 00:48:12
Estos dos métodos los necesitaría 00:48:15
Como poco 00:48:16
Cadenas.size 00:48:17
Incrementando y más más 00:48:20
Pues iso 00:48:23
Cadenas.get 00:48:26
De i 00:48:29
Es decir, jolín 00:48:31
Quiero un size en mi linked list 00:48:33
Y quiero un get 00:48:36
¿Vale? 00:48:37
Bueno, pues el que se anime 00:48:40
Que haga el size 00:48:42
y el get 00:48:44
aquí en esta clase 00:48:45
si no lloraremos mañana 00:48:46
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:
1
Fecha:
2 de febrero de 2026 - 19:17
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
48′ 50″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
2.25

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid