20250128 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:
Vale, pues hemos dicho que íbamos a empezar ya por fin
00:00:00
esto que se llama colecciones.
00:00:06
¿Vale?
00:00:14
Vale.
00:00:16
Bueno, pues en una aplicación
00:00:18
en una aplicación informática
00:00:21
siempre es imprescindible trabajar con datos.
00:00:27
Eso lo tenemos clarísimo. Y los datos tienen que estar en variables de la aplicación. Y eso también lo tenemos clarísimo. Que los datos tienen que estar en variables de la aplicación. A ver si el micrófono está bien porque el otro día no se oía nada. Vale. En datos de la aplicación.
00:00:31
entonces si son 3, 4 datos
00:00:52
3 números, 4 cadenas
00:00:55
en programas muy sencillitos
00:00:57
tenemos nuestras variables para guardarlos
00:00:58
pero normalmente una aplicación
00:01:01
trabaja con
00:01:03
volúmenes de datos grandotes
00:01:04
pues un montón de usuarios
00:01:06
un montón de DNIs
00:01:08
un montón de objetos
00:01:10
factura
00:01:12
trabaja con un montón de datos
00:01:14
normalmente volcados en una base de datos
00:01:16
pero eso ya es otro tema
00:01:19
Bueno, pues entonces para trabajar con un volumen de datos grande, las variables primitivas ya sabemos que no se adaptan, entonces usábamos Arrays y ya está.
00:01:20
Y es lo único que hemos usado porque no teníamos otra cosa.
00:01:30
Y sabemos que un Array es una estructura que es esto, tal cual.
00:01:32
Un montón de datos que están ahí en filita y la ventaja que tienen, la ventaja maravillosa que tienen, es que se les puede acceder a través de la posición.
00:01:41
¿Vale? A través de la posición.
00:01:51
Y ese acceso es rapidísimo, es inmediato.
00:01:53
Una vez que el array ya está creado en memoria, su espacio,
00:01:56
el acceso a través de la posición es muy rápido.
00:02:00
¿Vale? En términos de rendimiento, me refiero.
00:02:04
Y esto es lo único que hay y lo único que existe para guardar muchos datos en memoria.
00:02:07
Un array que los tiene todos así a mogollón, uno tras otro,
00:02:13
y la posibilidad de acceso a través de un índice.
00:02:16
¿Vale? Y no hay nada más
00:02:19
Entonces, está claro
00:02:22
Que aunque tiene esa
00:02:25
Rapidez de acceso a través del índice
00:02:27
Tiene la pega que nos hemos encontrado
00:02:29
Todo el rato y que hemos sufrido
00:02:31
Que una vez que uno ha decidido
00:02:32
Usar un array de 30 posiciones
00:02:35
O 40 o 50
00:02:37
El array es de 30 posiciones
00:02:39
O 40 o 50
00:02:41
Es imposible decidir
00:02:43
Ay no, espera, que quiero ahora tener más
00:02:44
Ah, lo hago más grande
00:02:46
Uy, me están sobrando un montón
00:02:47
pues corto esto, no, eso no se puede hacer
00:02:49
entonces es poco eficiente
00:02:52
en términos de aprovechamiento de la memoria
00:02:54
claro
00:02:56
vale, pero es lo único que hay
00:02:57
es que no hay otra cosa
00:03:00
bueno, pues entonces, ¿qué es lo que
00:03:00
se ha incorporado a través de Java 2
00:03:04
las primeras versiones y luego después?
00:03:06
pues hacer por código, programar
00:03:08
estructuras
00:03:10
apoyadas sobre
00:03:12
lo único que hay, que son
00:03:14
en términos de almacenamiento, me refiero
00:03:16
las variables primitivas
00:03:18
y los arrays
00:03:21
que apoyándose sobre eso
00:03:23
programen, simulen
00:03:25
una forma de funcionamiento que sea más cómodo
00:03:27
pero está todo programado
00:03:30
por encima
00:03:32
como vamos a programar nosotros ahora
00:03:33
entonces
00:03:36
eso como se hace todo el rato
00:03:37
usar esas otras
00:03:39
programar esas otras estructuras
00:03:41
que son más cómodas a la hora de usar
00:03:43
pues ya directamente
00:03:45
se hacen unas clases
00:03:47
que te ofrecen métodos que tú los usas
00:03:48
y ya está simulado
00:03:51
ese comportamiento. El comportamiento
00:03:52
en realidad de estructura
00:03:55
dinámica. Vale, a ver.
00:03:57
Que me explico un poco mal.
00:03:59
Lo que está claro es que
00:04:01
nosotros solamente
00:04:02
en Java solamente provee de
00:04:05
la posibilidad de declarar variables
00:04:07
primitivas y arrays.
00:04:09
Y bueno, y variables objeto.
00:04:11
Claro, variables objeto. O sea, variables
00:04:13
en general sueltas, variables sueltas
00:04:15
sean primitivas o objetos, variables sueltas
00:04:17
y arrays, y ya está, y no provee de nada más
00:04:19
vale, el problema
00:04:21
del array es que es estático
00:04:23
lo que hemos dicho, de que una vez declarado
00:04:25
30 con 40 de ahí no se mueve
00:04:27
y eso es incómodo
00:04:29
a la hora de usarlo
00:04:31
es incómodo porque si me aparecen
00:04:32
20 usuarios nuevos
00:04:34
no tengo espacio para ellos
00:04:37
o si de repente empieza ya
00:04:38
una forma de trabajo en la cual
00:04:41
solamente trabajo
00:04:42
con 10, pues todo lo que tenía
00:04:45
reservado no vale, entonces es incómodo
00:04:47
bueno, pues entonces
00:04:49
se programa
00:04:51
y esto ya es por programa, por encima
00:04:53
otras estructuras, que son las que
00:04:55
se llaman estructuras dinámicas
00:04:57
y dinámicas
00:05:00
¿por qué? porque simulan
00:05:09
que todo está simulado
00:05:11
el efecto de un array
00:05:12
que crece
00:05:15
según media milagana, se encoge
00:05:17
según media milagana, etcétera, simulan
00:05:19
eso, pero lo simulan por programa
00:05:21
entonces
00:05:22
una vez que esa clase ya está hecha
00:05:25
y simula ese comportamiento
00:05:28
yo me limito a usarla
00:05:29
y entonces a nivel de código
00:05:31
a nivel de uso
00:05:33
es mucho más fácil
00:05:36
el desarrollo me va a quedar mucho más cómodo
00:05:38
lo que hay por debajo
00:05:40
sigue siendo pesado
00:05:41
lo que hay por debajo sigue siendo un array
00:05:43
que está haciéndose, deshaciéndose
00:05:45
todo eso, pero eso ya lo ha programado
00:05:47
alguien y me da a mí los métodos
00:05:49
para que yo simule que estoy metiendo algo nuevo
00:05:51
y que la raya del suelo se ha agrandado
00:05:54
o que estoy sacando y que la raya del suelo se ha encogido.
00:05:56
Por eso se les llaman estructuras dinámicas,
00:05:59
porque son estructuras de almacenamiento
00:06:02
que simulan o dan a entender
00:06:04
que efectivamente se están adaptando en cada momento
00:06:11
al volumen de datos que yo tengo.
00:06:15
Cuando tengo este dato, este volumen, se adaptan y son así.
00:06:16
cuando meto más volumen de datos
00:06:20
se van agrandando, algo que la RAI no hace
00:06:22
pues estas estructuras son clases
00:06:24
que ya están hechas y que nosotros usamos
00:06:26
que a través de métodos muy sencillos
00:06:28
añadir, borrar
00:06:31
etcétera
00:06:33
pues simulan ese comportamiento
00:06:34
entonces son muy cómodas de usar
00:06:37
pero por debajo está la programación
00:06:38
de toda la vida, por debajo está eso
00:06:41
entonces
00:06:43
en estructuras dinámicas
00:06:45
hay
00:06:46
vamos a tener que desglosarlas
00:06:47
una por una, porque hay matices
00:06:50
de funcionamiento muy distintos entre
00:06:52
unas y otras, y eso implica
00:06:54
que algunas se adaptan
00:06:56
mejor a unas situaciones que otras. Entonces, tenemos
00:06:58
que poder seleccionar en cada situación
00:07:00
qué estructura dinámica se adapta
00:07:02
mejor. Bueno, pues estructuras dinámicas
00:07:04
hay muchos
00:07:06
tipos, que se dividen en
00:07:08
tres grandes grupos.
00:07:14
Tres grandes grupos.
00:07:16
Las listas,
00:07:18
los conjuntos
00:07:19
y los mapas
00:07:25
lo que
00:07:28
también se suele llamar
00:07:30
en programación diccionarios
00:07:32
son tres tipos
00:07:34
de estructuras dinámicas que hay, listas
00:07:39
conjuntos y diccionarios
00:07:41
vale, entonces esto
00:07:43
el que lo diseñó
00:07:45
e hizo las clases para que
00:07:47
luego nosotros las usáramos
00:07:49
pues por supuesto hizo un diseño
00:07:51
basándose en herencia y en interfaces
00:07:53
por supuesto
00:07:55
entonces pues
00:07:56
existe una cosa
00:07:58
que es la interfaz
00:08:01
colección
00:08:03
esta si tal cual
00:08:04
que es una interfaz
00:08:06
que tiene los métodos básicos de
00:08:08
meter en la colección, borrar de la colección
00:08:10
y poquito más
00:08:12
y esta interfaz
00:08:13
tiene una implementación
00:08:15
concreta
00:08:19
que es list
00:08:20
que es la implementación
00:08:21
que ya adapta
00:08:25
el funcionamiento al de las listas
00:08:27
que ya veremos cuál es
00:08:29
y tiene una implementación que es
00:08:30
set
00:08:33
que esa implementación ya particulariza
00:08:34
estos métodos de añadir
00:08:37
meter, sacar y borrar
00:08:39
los particulariza al funcionamiento
00:08:40
concreto de los conjuntos
00:08:43
porque las listas y los conjuntos
00:08:45
funcionan internamente de forma distinta
00:08:47
o sea, todo esto vale
00:08:49
para meter y sacar y tener
00:08:51
y guardado, no vale para nada más que para eso
00:08:53
para meter cosas y tenerlas ahí guardaditas
00:08:55
y sacarlas y consultarlas
00:08:57
todo eso solo vale para eso
00:09:00
para almacenar datos, son estructuras de almacenamiento
00:09:01
solo vale para almacenar
00:09:04
pero claro, como el almacenamiento
00:09:05
el diseño del almacenamiento es una parte
00:09:08
tan importante
00:09:10
en un código, porque de ahí depende
00:09:11
que el código tenga más o menos rendimientos
00:09:14
sea más fácil de programar, sea más fácil de ampliar
00:09:15
como es, el almacenamiento
00:09:18
es tan crítico, por eso hay tantas posibilidades
00:09:20
hay tantas
00:09:22
una de ellas es el array, ya está
00:09:23
pero aparte del array están todas estas
00:09:25
que funcionan de forma distinta
00:09:27
bueno, pues todas esas
00:09:29
son las diferentes clases que están
00:09:32
programadas en una arquitectura
00:09:34
de herencia de este tipo
00:09:36
repito, collection
00:09:38
una interfaz con los métodos básicos
00:09:39
de meter, sacar, pero ahora ya
00:09:41
las listas
00:09:44
implementan esos métodos de una manera
00:09:45
concreta, pero siguen siendo
00:09:48
los mismos métodos, meter y sacar y consultar
00:09:50
los conjuntos implementan
00:09:52
esos métodos de otra manera concreta
00:09:54
pero siguen siendo mismos métodos, meter, consultar
00:09:56
sacar y ya está
00:09:59
los mapas no eran de colección, son otra
00:09:59
interfaz aparte
00:10:02
que se llama map
00:10:05
entonces list, set
00:10:05
y map, que no era de colección
00:10:08
son tres implementaciones
00:10:10
concretas
00:10:13
para meter, sacar y guardar
00:10:14
datos en algún lado
00:10:17
eso es lo que es
00:10:18
Y luego, a su vez, las listas tienen variantes en función de cómo se haga internamente. Las listas tienen el ArrayList, que es una implementación concreta de List, porque List sigue siendo una clase abstracta.
00:10:20
de esta, que ya te implementa
00:10:53
de una manera muy concreta cómo hacer
00:10:55
el meter, sacar y consultar.
00:10:57
De una forma muy concreta.
00:10:59
Pero tiene otra.
00:11:02
Tiene otra implementación
00:11:04
que es la Linked List.
00:11:06
Entonces, estas ya sí que son
00:11:12
dos implementaciones concretas,
00:11:13
dos cosas que podemos instanciar
00:11:15
y usar para guardar cosas a mogollón.
00:11:17
Esta es una
00:11:21
y esta es otra. Y las dos se usan
00:11:21
igual porque solamente valen
00:11:23
para eso, para meter y sacar, las dos se usan
00:11:25
igual, lo que pasa es que
00:11:27
por dentro están construidas
00:11:29
de forma distinta
00:11:32
y eso tiene implicaciones en cuanto a rendimiento
00:11:32
para cuál, en qué situaciones se adapta
00:11:36
mejor esta, en cuál se adapta mejor esta
00:11:37
que tendremos que saber distinguir
00:11:39
¿vale?
00:11:41
¿vale? y ¿por qué hay dos?
00:11:43
list y set
00:11:46
bueno, pues hay dos
00:11:46
porque las listas están pensadas
00:11:49
para que en la cajita
00:11:52
de listas
00:11:53
pensad que las colecciones
00:11:54
son cajas, no son más que esto
00:12:01
las colecciones son una caja
00:12:04
para meter cosas, igual que era una raíz
00:12:05
una caja, ¿vale?
00:12:08
pues las listas, tanto esta
00:12:10
como esta, son una implementación
00:12:12
concreta de la caja
00:12:14
una implementación concreta
00:12:15
de la caja, en la que
00:12:18
las cosas que metemos en la caja
00:12:20
tienen una posición
00:12:22
¿vale? luego la lista
00:12:23
es una implementación en la cual
00:12:27
yo meto algo en la caja
00:12:29
pero lo meto en una posición siempre
00:12:31
luego la lista sería
00:12:33
una cajita con posiciones
00:12:35
y yo meto en la posición
00:12:37
y puedo recuperar por posición
00:12:38
puedo decir, oye, recupérame
00:12:41
la que pusiste en la posición 4
00:12:43
conceptualmente es igual que un array
00:12:45
en un array todo lo que metemos tiene una posición
00:12:48
pues en una lista
00:12:51
todo lo que metemos tiene una posición
00:12:53
¿vale?
00:12:54
entonces
00:12:56
lo que caracteriza la lista
00:12:59
es que puedes meter dos cosas iguales
00:13:03
en realidad, porque van a ser
00:13:05
distinguibles por la posición
00:13:07
¿verdad? imagínate que es una
00:13:09
lista en la que yo voy a meter caracteres
00:13:11
letras
00:13:13
pues podría meter esto
00:13:14
y pueden coexistir dos X
00:13:16
perfectamente, pueden coexistir dos
00:13:19
porque una iría en esta posición
00:13:21
y otra iría en esta
00:13:23
luego en una lista
00:13:24
las cosas que meto
00:13:26
se caracterizan por supuesto por su valor
00:13:27
lo que tiene, la letra X
00:13:29
pero también se caracterizan
00:13:31
por la posición en la que están
00:13:33
desde el momento en el que las meto en la lista
00:13:36
vale
00:13:37
sin embargo eso
00:13:40
el llevar un registro
00:13:41
del orden o de la posición
00:13:44
en la que se han metido las cosas en la lista
00:13:46
requiere pues programarlo
00:13:47
y tiene sus complejidades
00:13:49
de programación
00:13:52
pues los sets están pensados
00:13:52
para situaciones en las cuales
00:13:55
eso me da igual
00:13:58
¿qué es un set? pues un set es
00:13:58
una implementación de esta cajita
00:14:01
un set es un conjunto
00:14:03
una implementación de esta cajita
00:14:05
en la que no hay ningún tipo de orden
00:14:07
las cosas se meten
00:14:09
en cualquier sitio
00:14:12
donde caen
00:14:14
luego esto por dentro
00:14:14
es más fácil de programar
00:14:17
que esto porque no hay que llevar un registro
00:14:20
de la posición en la que ha caído la cosa
00:14:22
aquí en un conjunto
00:14:24
si yo meto caracteres
00:14:26
el problema que tengo es que
00:14:27
la X no la puedo meter dos veces
00:14:30
¿vale? si yo
00:14:32
metiera otra X aquí
00:14:34
estas clases
00:14:35
están pensadas para
00:14:38
no aceptar esa X, porque ya hay una
00:14:39
entonces como ya hay una
00:14:42
esa otra X en la caja
00:14:44
no se distinguiría de esta
00:14:45
no se distinguiría, no puede haber aquí otra X
00:14:48
entonces ¿cómo distingues esta de esta?
00:14:50
Si no tienen posición, están ahí las dos a mogollón.
00:14:52
No podrías distinguir cuál es la primera X que metiste y la segunda.
00:14:55
Serían indistinguibles.
00:14:58
Entonces, las clases set están programadas y pensadas para que tú no puedas meter duplicados.
00:14:59
Y cuando intentas meter en una caja un elemento igual a otro que ya está igual,
00:15:06
pues entonces el conjunto simplemente no lo mete.
00:15:15
No lo mete y ya está.
00:15:17
¿vale? no se pueden meter en un set
00:15:18
elementos duplicados
00:15:20
pues esa es la
00:15:22
principal diferencia entre list y set
00:15:24
y por eso hay dos tipos de colecciones
00:15:27
tan distintas, porque en esta
00:15:29
la cajita tiene posiciones
00:15:31
con lo cual puedo meter duplicados
00:15:32
es decir, dos cosas
00:15:35
puedo meter dos cosas iguales
00:15:36
y en esta nunca puede haber
00:15:38
dos cosas iguales, porque el conjunto
00:15:41
nunca te habría dejado meter una cosa
00:15:43
igual a otra que ya está
00:15:45
entonces, en función de lo que tú estés programando
00:15:46
lo que estés desarrollando, cuál sea tu modelo de datos
00:15:49
qué es lo que estés haciendo
00:15:51
pues te puede valer un set o no
00:15:52
si tú necesitas que sí están duplicados
00:15:55
un segundo Inés, dime
00:15:57
¿qué diferencia es con un array?
00:15:59
a ver, un array es lo que es
00:16:03
es una estructura nativa, por decirlo así de Java
00:16:05
¿vale? que tiene las características
00:16:07
que conocemos, que es tú la declaras
00:16:09
tiene un tamaño fijo que ya
00:16:11
no se puede cambiar
00:16:13
y se accede a sus posiciones por Ingrid.
00:16:14
Vale, entonces una lista
00:16:17
que puede haber varias
00:16:19
variantes, es una estructura
00:16:21
de programación que se programa
00:16:23
de hecho vamos a hacerlas las dos,
00:16:25
vamos a programar nosotros,
00:16:27
se programa de tal manera que te
00:16:29
ofrece unos métodos que
00:16:31
te facilitan la inserción y el recuperar
00:16:33
de los datos. Entonces tú te olvidas
00:16:35
de
00:16:37
el problema del array
00:16:38
de que si quieres meter un dato nuevo
00:16:41
que no te cabe, todo eso que hemos hecho
00:16:43
de hacer un array con una posición más
00:16:45
meterlo extra
00:16:46
sustituir el
00:16:48
viejo con el nuevo, todo eso
00:16:51
que hemos estado haciendo todo el rato
00:16:53
la lista te lo enmascara
00:16:54
y te ofrece un método, añade
00:16:56
tú llamas al método, añade
00:16:59
y ya por dentro hace todo lo que haga falta
00:17:00
¿vale? o sea, una lista es como
00:17:03
una especie de
00:17:05
enmascarar un array
00:17:05
para usarlo, para que te aparente
00:17:08
a ti que es dinámico
00:17:11
para que tú veas que es dinámico.
00:17:12
Eso que yo he dicho en particular es una
00:17:15
ArrayList. Lo que pasa es que luego
00:17:16
está la LinkedList, que también simula
00:17:18
eso, pero no partiendo de un Array,
00:17:20
partiendo de otra cosa mucho más chula.
00:17:22
Pero simula eso también.
00:17:24
¿Vale?
00:17:26
Entonces, lo que estamos ahora un poco...
00:17:28
Te digo que si en un set
00:17:31
que no tiene posiciones, metes dos objetos
00:17:32
que son de diferente tiempo, una de sus
00:17:34
propiedades, sí puede, pero se tiene
00:17:36
diferencia. Claro, a ver.
00:17:38
El set decide
00:17:40
si lo que tú le das es igual
00:17:42
que algo que ya esté, llamando
00:17:44
al método equals.
00:17:46
Claro, de ahí la importancia de equals.
00:17:48
O sea, si tú le tienes puesto un método equals para que te diga
00:17:50
el nombre, tiene que ser el nombre distinto
00:17:52
en concreto. Aunque las otras características
00:17:54
le darían igual. Efectivamente.
00:17:56
Ahora ya, cuando usamos colecciones para
00:17:58
guardar datos, la implementación
00:18:00
de equals ahora ya sí que es fundamental.
00:18:02
Porque las colecciones,
00:18:04
los conjuntos en particular, cuando tú le metas
00:18:06
un dato, va a decir, a ver,
00:18:08
hay uno igual, y para ver si hay uno
00:18:10
igual es equals. Java no tiene otra forma
00:18:12
de ver si un objeto es igual a otro.
00:18:14
Y ese equals está definido como tú quieras.
00:18:15
No había la importancia de los equals antes porque
00:18:17
si tú lo quieres realista, aunque sean iguales...
00:18:19
Claro, pues equals es fundamental
00:18:21
para cualquier estructura de programación
00:18:23
que necesite saber si algo es igual a otro.
00:18:25
Y el conjunto necesita saber
00:18:27
si algo es igual a otro
00:18:30
para decidir si lo mete o no lo mete, por ejemplo.
00:18:31
Es esto lo que tú decías.
00:18:34
Y ese equals ya estará programado como tú hayas querido.
00:18:35
Que no lo has programado.
00:18:38
Será el equals de object.
00:18:40
Porque es el heredado.
00:18:42
Y el equals de object define
00:18:43
que un objeto es igual a otro
00:18:45
si la dirección de memoria es la misma.
00:18:47
Luego, si tú no
00:18:50
sobreescribieras un método
00:18:52
igual, si no hubiera tus clases...
00:18:54
Pues que todos los objetos idénticos
00:18:55
están con la dirección de memoria distinta.
00:18:55
Claro, el set los cogería.
00:18:57
Los cogería todos, porque para él son distintos.
00:18:58
Porque están en direcciones de memoria distintas.
00:19:01
Pero normalmente, eso no es lo que tú quieres hacer.
00:19:03
Porque la aplicación pierde su sentido.
00:19:06
¿Vale?
00:19:08
Tú quieres que la aplicación tenga sentido
00:19:09
y que si dos objetos sean iguales
00:19:10
en virtud de N, I y D, lo que tú seas,
00:19:12
pues que la aplicación lo sepa.
00:19:15
Claro, la clave primaria
00:19:17
tiene un sentido real
00:19:18
y es que dos cosas sean la misma.
00:19:20
Entonces tienes que simularla con el equal.
00:19:22
Si no, la aplicación no tiene sentido.
00:19:24
Claro, y
00:19:27
quien te dice las colecciones,
00:19:28
hay muchas otras clases que necesitan saber
00:19:30
si algo es igual que otra cosa.
00:19:32
Entonces tú lo tienes que proveer con el equal.
00:19:35
Porque si no lo provees con el equal,
00:19:37
se ha perdido el sentido todo.
00:19:38
vale
00:19:39
entonces
00:19:40
estos son los dos tipos esenciales
00:19:42
de colecciones que heredan
00:19:46
de esta, de colección
00:19:48
y luego aparte yo he mencionado para que tengamos ya
00:19:49
los tres conceptos que tenemos
00:19:52
que ver, los mapas
00:19:54
que son los diccionarios
00:19:55
la particularidad que tienen los mapas
00:19:58
es que también valen
00:20:00
para guardar datos, como todo
00:20:01
para guardar datos, pero los mapas
00:20:03
guardan los datos siempre en forma
00:20:05
de pares, una clave
00:20:08
y un valor
00:20:10
una clave y un valor
00:20:10
en las listas y los conjuntos
00:20:13
se guarda el dato tal cual
00:20:16
un dato, otro dato, otro dato, otro dato
00:20:17
en los mapas
00:20:20
tú guardas el dato
00:20:21
siempre asociado a una clave
00:20:23
y tú metes el par
00:20:25
por eso se llaman diccionarios
00:20:27
porque un diccionario es un montonazo
00:20:29
de pares
00:20:32
nombre de palabra, significado
00:20:33
nombre de palabra, significado
00:20:35
Eso es un diccionario, ¿no? ¿Vuestra generación todavía ha visto un diccionario alguna vez? ¿Un papel? ¿Un preso?
00:20:37
Bueno, pues eso es un diccionario, un conjunto de pares, término, significado, término, significado, término, significado, pues el mapa reproduce esa idea, un conjunto de pares, clave, contenido de la clave, clave, contenido de la clave.
00:20:46
existe esa estructura programada
00:21:04
porque está programada, no es que exista
00:21:06
como el array que existe por ciencia infusa
00:21:08
existe esta estructura
00:21:10
porque en muchas situaciones
00:21:12
es interesante
00:21:14
que cada dato
00:21:16
tenga asociado una clave única
00:21:18
porque nos va a facilitar
00:21:20
normalmente el recuperar los datos
00:21:22
es más fácil recuperar por clave
00:21:24
que recuperar por contenido
00:21:25
el diccionario, si es útil
00:21:27
es precisamente porque está organizado de esa manera
00:21:30
término, significado
00:21:32
y los términos ordenados alfabéticamente
00:21:34
entonces tú rápidamente en un diccionario
00:21:37
encuentras el significado que buscas
00:21:39
porque vas buscando por término
00:21:41
pues entonces
00:21:43
a veces una estructura
00:21:44
map con un montón de términos, clave, valor
00:21:46
te facilita encontrar rápidamente
00:21:48
un valor, porque tú vas
00:21:50
a la clave
00:21:52
y todo eso está programado por dentro
00:21:53
y nosotros nos vamos a limitar a aprender a usar
00:21:57
estas dos de aquí
00:21:58
el ArrayList y el LinkedList y que las vamos a programar
00:22:01
porque tenéis que
00:22:03
pues tenéis que saber aprender a programar
00:22:04
y los conjuntos y los mapas
00:22:07
ya vamos a aprender a usarlos
00:22:09
vale, de listas
00:22:11
ya hemos dicho
00:22:13
que hay dos implementaciones concretas
00:22:14
el ArrayList
00:22:17
y el LinkedList
00:22:18
y de conjuntos
00:22:20
hay tres, el HashSet
00:22:25
una pequeña variante
00:22:27
del HashSet que es el Linked
00:22:32
HashSet
00:22:33
y el
00:22:35
tree set
00:22:37
¿en qué se diferencian entre ellas?
00:22:38
en cómo están programadas por dentro
00:22:42
¿vale?
00:22:44
en cómo están programadas por dentro
00:22:48
y en función de cómo están programadas por dentro
00:22:49
pues os repito, son más útiles para unas cosas
00:22:51
o para otras, o más que útiles pegan más
00:22:54
para unas cosas que para otras
00:22:56
entonces hay que entender bien un hash set por dentro
00:22:57
cómo está programado
00:23:00
un tree set por dentro cómo está programado
00:23:01
porque a veces el tree set
00:23:03
tiene muy buen rendimiento para algunas cosas
00:23:04
pero para otras no, entonces si pagas que no
00:23:07
pues a lo mejor no tienes que hacer, entonces depende de la
00:23:09
aplicación, pues interesa más coger
00:23:11
una que otra, sabiendo
00:23:13
que cualesquiera de ellas
00:23:15
son set
00:23:17
luego tiene esta particularidad
00:23:18
que no admiten duplicados
00:23:21
¿vale? y cualquiera
00:23:23
de estas son listas, luego tiene esa
00:23:25
particularidad, que todo en la cajita va
00:23:27
en una posición
00:23:29
y los mapas lo que he dicho
00:23:30
¿vale?
00:23:33
vale
00:23:36
Pues a ver, la que nos va a ser
00:23:36
Facilísimo de hacer
00:23:39
Es el ArrayList porque lo hemos estado usando
00:23:40
Todo el rato, hemos estado todo el rato metiendo en el Array
00:23:43
Cosas y sacando cosas del Array
00:23:45
Pues ahora ya vamos a darle un cuerpo
00:23:46
De clase, para usarla
00:23:49
Rápidamente
00:23:51
Y luego el LinkedList
00:23:52
Venga, hala
00:23:54
A ver
00:24:30
Venga, pues siempre que empezamos
00:24:34
algo, como nos estamos
00:24:35
todo el rato apoyando en lo
00:24:37
de siempre, porque hay que usarlo todo
00:24:39
hasta ahora, todo, no podemos obviar nada
00:24:41
de lo que hemos visto, pues de nuevo
00:24:43
aprovechad
00:24:45
los que estáis así tambaleandos
00:24:46
para volver
00:24:49
a
00:24:51
trabajar lo mismo, no hay otra vez
00:24:53
pues venga, vamos a
00:24:55
hacernos un proyecto
00:24:57
mis colecciones
00:25:00
porque van a ser las colecciones
00:25:02
nuestras que nos va a dar la gana
00:25:03
hacer a nosotros
00:25:05
que luego vamos a exportar a Ujar
00:25:06
y las vamos a usar como si fueran colecciones
00:25:09
para que ya tienes el ArrayList
00:25:11
y el LinkedInList, que van a ser esto
00:25:17
pero un poquito
00:25:19
mejor hecho, bueno mejor no
00:25:20
con más
00:25:23
venga pues ya está
00:25:24
a ver
00:25:26
Venga
00:25:35
A ver, Gels
00:25:38
¿Qué?
00:25:41
Sí, sí, sí
00:25:53
Te vamos a llevar a un sitio muy bonito
00:25:55
Con gente vestida de blanco
00:25:58
Sí, no te asustes
00:25:59
Vas a estar muy a gusto allí
00:26:02
Las paredes son blanditas
00:26:04
A ver, igual te ponen un chaleco un poquito incómodo
00:26:08
Pero te acostumbras
00:26:13
Según Brian, ¿no?
00:26:14
Venga, pues vamos a hacernos un paquete
00:26:22
Lista
00:26:24
Venga, listas
00:26:26
Porque aquí vamos a meter
00:26:29
Pues venga
00:26:30
vamos a hacernos nosotros
00:26:33
nuestra propia
00:26:37
nuestra propia clase
00:26:39
ArrayList
00:26:41
la que nos ven de Java
00:26:42
pues no, la vamos a hacer nosotros que somos malistos
00:26:43
venga
00:26:47
la vamos a llamar miArrayList
00:26:47
para no repetir el nombre
00:26:53
bueno, pues que va a ser esta clase
00:26:56
esta clase
00:27:03
esta clase está pensada
00:27:05
para que los objetos
00:27:06
que pertenecen a
00:27:09
a ella, guarden
00:27:11
dentro un montón de datos
00:27:13
de forma que
00:27:15
podamos nosotros
00:27:16
meter, sacar y consultar
00:27:18
de forma sencilla
00:27:21
y que nos sea completamente
00:27:22
transparente como
00:27:25
hace por dentro lo de meter, sacar,
00:27:27
consultar. Entonces, esta clase la idea es que nos ofrezca
00:27:29
datos, perdón, que nos ofrezca
00:27:31
métodos, por ejemplo, como este.
00:27:33
A ver, como tenemos que decidir
00:27:35
con qué tipo de datos vamos a trabajar,
00:27:37
porque todavía no hemos dado el salto
00:27:39
a tipo genérico que le vamos a dar
00:27:41
ya mismo, en cuanto tengamos
00:27:43
esta clase ya la damos a genérico
00:27:45
tenemos que decidir un tipo
00:27:47
de dato para ella, vamos a hacer esta primera
00:27:49
versión que guarde
00:27:51
cadenas, stream
00:27:53
venga, pues
00:27:59
entonces, esta clase
00:28:01
va a servir para guardar un montón de
00:28:03
cadenas dentro y además nos va
00:28:05
a dar datos para fácilmente
00:28:07
meter cadenas y sacar, nos va a dar
00:28:09
métodos, jolines, luego sería
00:28:11
maravilloso que esta clase
00:28:13
tuviera un
00:28:15
método que fuera este
00:28:17
donde yo le paso
00:28:19
un string
00:28:21
y lo mete en esa
00:28:22
estructura
00:28:27
porque si lo ofrecen, si ofrecen
00:28:27
este método, ya metí una
00:28:31
cadena nueva, y sería maravilloso
00:28:33
si tuviera un método
00:28:35
que yo le llamo get
00:28:37
por ejemplo le doy una posición y me devuelve la cadena en esa posición, magnífico, y sería genial si esta clase tiene un método que fuera borrar, por ejemplo, yo le doy una posición y me borra el elemento en esa posición, me lo saca de la lista,
00:28:38
Y sería también estupendo, por ejemplo, si tuviera un método que fuera tamaño y me devolviera el tamaño de la lista para ya saber cuántos elementos hay.
00:29:09
Si hay siete cadenas, ocho cadenas, nueve cadenas.
00:29:23
¿El punto led de quién?
00:29:29
Bueno, llámale el led si quieres, pero el led es de una RAI.
00:29:32
Vale, entonces.
00:29:35
Vale.
00:29:37
entonces yo lo que quiero es hacer una clase
00:29:38
para meter un montón de datos dentro
00:29:40
y que me ofrezca estos datos
00:29:42
y que me ofrezca estos métodos
00:29:45
porque yo lo único que quiero hacer con ese mogollón
00:29:46
de datos es meter datos
00:29:49
consultar datos por posición
00:29:51
eliminar datos por posición
00:29:52
y cuantos datos hay
00:29:55
porque claro si yo voy a recorrer
00:29:56
la colección pues la tendré que recorrer
00:29:59
a lo largo de su tamaño, maravilloso
00:30:01
claro pero nos falta algo esencial
00:30:03
que es
00:30:05
oye, pero ¿dónde los va a guardar?
00:30:06
hemos dicho que esta clase
00:30:10
me va a servir para guardar dentro
00:30:11
un montón de datos, un montón de cadenas
00:30:12
¿dónde los va a guardar? internamente
00:30:14
los va a guardar en algún sitio
00:30:16
muy bien, venga, pues internamente
00:30:17
pero nosotros no nos enteramos y nos da igual
00:30:20
internamente que los guarde
00:30:23
en un array
00:30:25
que inicialmente puede ser un array vacío
00:30:25
voy, voy, voy
00:30:29
voy, voy, ya
00:30:36
vale, pues entonces
00:30:37
mi clase, mi ArrayList
00:30:42
al que le va a usar
00:30:44
le da lo mismo, al que la va a usar
00:30:46
le da igual, no le importa
00:30:49
pero la clase, mi ArrayList
00:30:50
ella por dentro va a guardar
00:30:52
todos los datos en un Array y se va a limitar
00:30:54
a ofrecer unos métodos
00:30:57
para que la gente meta y saca
00:30:58
bueno, pues entonces el de añadir
00:31:00
ya lo sabemos programar
00:31:03
si el usuario
00:31:05
me pasa un dato.
00:31:07
¿Cómo lo meto en el array? Pues la misma
00:31:08
historia de siempre, que estamos hartos
00:31:10
ya de lo mismo. Nos hacemos
00:31:13
un auxiliar con una posición
00:31:15
más que
00:31:16
el datos en el que quiero meter.
00:31:18
Hacemos un
00:31:32
for en el que copio
00:31:32
todo lo que hay
00:31:34
en el array antiguo, que es datos,
00:31:39
en el nuevo.
00:31:42
Una vez que ese for ha terminado,
00:31:53
en la posición extra de auxiliar,
00:31:55
que es la de aux.lenc-1
00:31:57
copio el dato nuevo
00:32:03
y una vez que ya tengo mi aux completito
00:32:05
con los datos antiguos y el extra
00:32:09
sobre escribo datos
00:32:12
con el nuevo
00:32:15
pues genial
00:32:17
el método recuperar por posición
00:32:28
este es muchísimo más fácil
00:32:33
el método recuperar por posición
00:32:35
es tan fácil como este
00:32:37
Se la pasas por parámetro
00:32:39
O sea, cuando tú uses el método
00:32:50
Dices, dame el de la posición tal
00:32:52
Size
00:32:54
Bueno, size facilísimo también
00:32:59
Devuelvo esto
00:33:01
Ya está
00:33:05
Me dice error de compilación
00:33:05
Porque length
00:33:12
Me lo devuelve en tipo long
00:33:13
Y yo aquí he puesto int
00:33:15
Y entonces estoy yéndome
00:33:17
De un dato long a un int
00:33:20
Podría perder información
00:33:22
Bueno, voy a cambiar el size para que me devuelva un long
00:33:24
Y así
00:33:26
Y así no hago el casting y hago nada
00:33:27
Ahora, vale
00:33:30
Nada, o sea que datos.led
00:33:34
Me devuelve el tamaño de la array en long
00:33:43
Y por eso he puesto que me devuelva un long
00:33:46
Pero ya está, nada más
00:33:48
da igual, que más te da
00:33:49
vas a tener tú a raíz
00:33:56
de más de 2 elevado a
00:33:57
31
00:34:00
pues si
00:34:01
entonces es un chulo
00:34:04
y un listo de mierda
00:34:05
pues le pones long
00:34:07
y si tienes 2 elevado a 63
00:34:09
más de eso, que le pones
00:34:12
otro más
00:34:13
venga, remove
00:34:14
que me preguntaste
00:34:18
es que no, imagino que te diría
00:34:21
que lo tienes que construir tú por programa
00:34:28
claro, combinando varios
00:34:30
y haciendo multiplicaciones por dos
00:34:32
para llevar la parte a
00:34:33
construir otro por programa
00:34:35
como tipo de dato en sí
00:34:36
claro
00:34:38
eso
00:34:40
igual que estamos construyendo aquí
00:34:43
pues construir un tipo de dato que tuviera
00:34:45
parte una, parte dos
00:34:47
Y a ofrecer tú los métodos
00:34:48
Que fuera a guardar
00:34:51
Y a llevarte
00:34:52
Vale, entonces remove por posición
00:34:53
Si habríais a hacerlo, pues sí
00:34:58
Habría que hacer un auxiliar con una posición menos
00:35:00
¿Verdad?
00:35:02
De
00:35:14
Datos.length
00:35:15
Menos uno, uno con una posición menos
00:35:18
Hasta la posición
00:35:20
A borrar, copiamos los que había
00:35:22
Y luego copiamos con una de adelanto
00:35:24
entonces ahora
00:35:26
mientras i sea igual a 0
00:35:27
mientras i sea menor
00:35:31
que la posición que
00:35:33
no voy a copiar
00:35:35
que me voy a saltar
00:35:36
incrementando i
00:35:38
pues copiamos
00:35:40
en aux de i
00:35:41
copiamos datos de i
00:35:43
y ahora ya nos falta copiar
00:35:47
la segunda parte
00:35:51
la que va desde
00:35:52
pos más 1
00:35:54
Ah, perdón
00:35:56
Vale
00:36:01
Y
00:36:06
Ahora nos faltaría copiar
00:36:07
La que va
00:36:11
Desde pos más uno
00:36:12
Porque la pos nos la saltamos
00:36:15
Desde pos más uno
00:36:17
Mientras
00:36:20
Eh, perdón
00:36:21
Si, pos más uno
00:36:23
Mientras i sea menor
00:36:25
que datos.length
00:36:26
incrementando
00:36:29
y, vale
00:36:31
pues aquí hay que copiarla
00:36:35
en una inferior
00:36:38
de la y, porque i va por dentro de la aux
00:36:40
porque aux va por detrás
00:36:42
vale, y una vez que tenemos el aux construido
00:36:43
datos
00:36:54
igual a aux
00:36:56
vale, pues ahora ya hemos metido en una
00:36:57
clase nuestra, que podemos llamar
00:37:11
colección, y además porque lo es
00:37:13
en una clase nuestra la posibilidad de
00:37:14
instanciar objetos para guardar un montón de datos y simular un comportamiento dinámico.
00:37:17
Por ejemplo, ahora nos hacemos un paquete con mi main que hace cosas.
00:37:23
Venga, una clase main para hacer cositas.
00:37:43
Bueno, pues resulta que esta aplicación mía va a trabajar con un montón de nombres.
00:37:52
Un montón de nombres que pide por teclado o como sea.
00:37:57
Entonces, voy a meterle lo de leer por teclado.
00:38:01
Para que sea más cómodo, en el classpad le añado el jar.
00:38:05
A ver, está aquí, ¿qué es lo que falta?
00:38:26
Pedro, ¿qué es lo que falta?
00:38:28
Bueno, pues entonces, esta clase a mí me la han dado, ya ni siquiera tengo acceso a su código.
00:38:47
La puedo haber importado con un jar, me la han dado exportada en un jar, yo la he importado
00:38:55
Y no tengo ni código ni tengo nada
00:38:59
Pero sé que tengo una clase en mi ArrayList
00:39:00
Que puedo instanciar
00:39:03
Pues venga
00:39:04
Por ejemplo
00:39:06
Queremos un montón de nombres
00:39:12
Pues todos estos nombres
00:39:14
En lugar de crear un Array
00:39:16
Para ellos
00:39:18
Yo me creo
00:39:19
Una estructura, un objeto
00:39:22
Mi ArrayList
00:39:24
Vale
00:39:25
Importo
00:39:41
vale, entonces me he creado
00:39:43
un objeto de esa clase
00:39:47
¿este objeto para qué vale?
00:39:49
pues yo sé que vale, porque en la ayuda
00:39:51
que me han dado de la clase, que me he importado con el
00:39:53
jar, lo que sea, en la ayuda
00:39:55
he visto que vale para meter un montón de
00:39:57
nombres, con add, recuperar, lo que sea
00:39:59
pues yo me creo esta estructura
00:40:01
entonces esto es
00:40:03
una instancia concreta
00:40:04
de mi ArrayList, de la colección
00:40:07
que yo me he programado, que vale para
00:40:09
meter un montón de nombres
00:40:11
vale, y yo repito
00:40:12
como esté hecha por dentro me da igual, sé que vale
00:40:15
para guardar nombres, bueno pues por ejemplo
00:40:17
suponer que le vamos a pedir
00:40:18
en un bucle a un usuario
00:40:20
que meta nombres
00:40:22
todo el rato
00:40:25
por ejemplo yo que sé, pues 10 nombres
00:40:25
vamos a suponer que
00:40:28
un programa que mete 10 nombres
00:40:30
y luego los muestra, ya está, vamos a hacer eso
00:40:33
venga, pues vamos a meter 10 nombres
00:40:35
luego un bucle que ejecutamos
00:40:39
10 veces
00:40:41
y ahora le decimos
00:40:41
nombre
00:40:45
ahora leemos el nombre
00:40:51
y ahora este nombre
00:40:57
se va a la caja
00:41:05
no se va a un array
00:41:07
que yo construí, nada, se va a la caja
00:41:09
nombres, porque nombres es una caja
00:41:11
una colección, y como se va a la caja
00:41:13
pues a través de su método add
00:41:15
que acabo de programar, ala, ya está en la caja
00:41:18
como está hecha por dentro de esa caja
00:41:21
me da igual, yo sé que llamo al método
00:41:25
add y el nombre
00:41:26
se va a esa cajita nombres
00:41:28
que acabo de crear
00:41:30
de esta clase
00:41:32
ya está, me da igual
00:41:33
los detalles
00:41:36
entonces yo desde fuera
00:41:37
veo como voy
00:41:41
metiendo, voy metiendo, luego la caja se va
00:41:43
agrandando, pero es una lista dinámica, yo voy metiendo
00:41:44
nombres, voy metiendo nombres y ya está, en este caso 10
00:41:46
como si fueran 100, como si fueran 50
00:41:48
esto es simplemente una caja para meter
00:41:50
nombres
00:41:52
venga a suponer que ya hemos metido la caja
00:41:53
ahora vamos a mostrarlos
00:41:56
podría ser cualquier otra cosa la que queramos hacer
00:41:57
pero vamos a mostrarlos
00:42:03
vale pues yo sé que esta cajita
00:42:04
mía nombres tiene un método get
00:42:07
para devolverme
00:42:09
el de cada posición si a mi me da la gana
00:42:11
bueno de hecho
00:42:13
en lugar de mostrarlos todos vamos a hacer una cosa
00:42:15
mostramos el primero
00:42:16
introducido pues como mostramos
00:42:18
el primero introducido como va a salir
00:42:20
pues nombres
00:42:22
punto get
00:42:24
de 0
00:42:26
entonces yo aquí me olvido
00:42:28
de la implementación interna que es un array
00:42:33
tengo un get que me saca el que yo quiera
00:42:35
vamos a mostrar el último
00:42:36
pues el último
00:42:39
sería
00:42:51
el noveno en este caso
00:42:53
vale resulta que queremos
00:42:56
eliminar
00:42:58
el que está en la posición 3
00:42:58
por ejemplo
00:43:02
eliminamos
00:43:02
posición
00:43:06
3
00:43:07
bueno, pues yo sé que hay un método
00:43:09
de esa cajita que me acabo
00:43:12
de construir nombres
00:43:14
sé que hay un método que es remove
00:43:15
que le paso una posición y me elimina
00:43:18
ese, pues magnífico
00:43:20
voy a mostrar ahora los que tengo
00:43:22
todos, pues voy a recorrer
00:43:26
voy a recorrer
00:43:28
mi colección
00:43:30
desde igual a 0, metéis a menor que igual
00:43:31
que el tamaño que tenga la colección
00:43:33
el tamaño que tenga la colección, sé cuál es
00:43:35
Porque he programado un método size
00:43:37
Entonces, como he programado este método
00:43:39
El tamaño de la colección sé cuál es
00:43:42
Que ahora mismo será uno menos
00:43:44
Porque he hecho un remove
00:43:45
Y ahora vamos a mostrar todos y cada uno
00:43:46
De los que están en esas posiciones
00:43:56
Uy, nombres get
00:43:57
Bueno, pues esto es mucho más cómodo de usar
00:44:01
Que cualquier array
00:44:11
Tengo mi add para añadir
00:44:12
Cuando a mí me dé la gana meter uno nuevo en la caja
00:44:16
mi remove para eliminar el que yo quiera
00:44:18
en la posición que quiera
00:44:21
un método de consulta por posición
00:44:22
y podría poner muchos más métodos
00:44:24
para hacer cosas con lo que hay ahí
00:44:27
pero bueno, esto es para ver la idea
00:44:29
de lo que es una colección
00:44:30
pues esto es una colección
00:44:32
de verdad
00:44:35
de todas las que hay
00:44:37
esto es una clase como esta que hemos hecho
00:44:38
que mediante sus variables
00:44:41
internas te provee
00:44:43
de una posibilidad de guardar muchas cosas
00:44:45
dentro y te provee de
00:44:47
métodos para meterlos, sacarlos y consultarlos.
00:44:49
Es una colección.
00:44:51
Con lo cual, tú la usas
00:44:53
instanciando la colección.
00:44:55
La usas
00:44:59
instanciando la colección y la usas
00:44:59
como se usan las colecciones,
00:45:01
que se usan para meter, sacar y consultar
00:45:03
y punto, pelota.
00:45:06
¿Y cómo está hecha por dentro? Te da igual.
00:45:07
¿Cómo añade? Me da lo mismo. Yo añado
00:45:09
y se acabó. ¿Cómo recupera?
00:45:11
Me da igual cómo recupere. Yo recupero
00:45:13
y se acabó. ¿Cómo borra? Me da igual.
00:45:15
yo borro y se acabó, dime
00:45:17
el tamaño porque así
00:45:19
la he programado yo, yo me he hecho un método
00:45:24
size aquí que te
00:45:26
devuelve el tamaño
00:45:28
de los datos
00:45:30
entonces size te da el tamaño de los datos
00:45:32
por eso el size es imprescindible
00:45:34
para recorrer esa colección
00:45:37
claro, pero por eso he hecho
00:45:38
el método size
00:45:44
aquí nombres nunca le haría lenz
00:45:45
claro, es el método
00:45:47
de hecho es que el array este
00:45:49
es privado. Que exista este
00:45:52
array, el usuario de la colección
00:45:54
no tiene ni idea de que este array existe. Es su forma
00:45:56
interna de guardar esos datos.
00:45:58
Tú desde fuera
00:46:01
añade, desde fuera
00:46:01
llamas a los métodos y ya está.
00:46:04
¿Vale? Entonces,
00:46:07
lo que pasa es que nosotros hemos hecho esto
00:46:09
muy alegremente. Aquí pueden salir un punto de interés
00:46:12
y de todo, porque no estamos viendo los casos particulares
00:46:14
de
00:46:17
borrar uno y le das una posición
00:46:17
que no exista, entonces
00:46:20
yo he hecho los métodos sin verificar
00:46:22
por ejemplo el get
00:46:25
habría que verificar que
00:46:26
pos está comprendido
00:46:28
entre 0 y el tamaño
00:46:30
del array menos 1 porque si no esto me va a dar
00:46:32
un array in this bound exception
00:46:34
pero a ver, mi idea ahora es que
00:46:35
entendáis la filosofía de las colecciones
00:46:38
que es una clase que
00:46:40
internamente te ofrece
00:46:42
espacio de almacenamiento
00:46:44
y te ofrece
00:46:46
una forma de acceder a ese espacio
00:46:48
de almacenamiento, ese espacio
00:46:50
de almacenamiento como está
00:46:52
hecho, si está con una array, si está con una lista
00:46:54
enlazada, como veremos luego
00:46:56
es lo de menos, entonces vamos a hacer
00:46:58
este main, a ver si
00:47:00
pero voy a ponerlos con
00:47:01
con mensajitos
00:47:04
para enterarnos bien de los
00:47:06
a ver
00:47:08
el primero, voy a poner
00:47:10
ahí para liarnos
00:47:13
el primero
00:47:15
aquí ponemos
00:47:16
el segundo
00:47:19
voy a poner aquí
00:47:24
el segundo no, perdón
00:47:27
el último
00:47:28
voy a poner aquí
00:47:30
eliminamos
00:47:36
el que está en posición 3
00:47:42
y ahora voy a poner aquí
00:47:46
los que quedan
00:47:49
vale, a ver si así
00:47:56
podemos, entendemos mejor
00:47:58
la salida y
00:48:00
A ver qué ocurre
00:48:01
Venga, ejecutamos esto
00:48:03
Vale, ha metido cadena de texto
00:48:09
Pues
00:48:10
Tenía que haber puesto 5
00:48:12
Vale
00:48:16
Entonces yo he metido mis 10 cadenas de texto
00:48:23
El primero, este, efectivamente
00:48:26
El último que metí
00:48:28
Este, efectivamente
00:48:30
Vamos a eliminar la posición 3
00:48:31
Que la posición 3
00:48:33
Era el DD
00:48:36
No, el DD no, ese es el 2
00:48:37
el FF, vamos a ver
00:48:39
si el FF lo he eliminado
00:48:42
pues sí, el FF lo he eliminado
00:48:43
¿vale?
00:48:45
luego yo
00:48:48
desde fuera
00:48:49
y como usuario
00:48:50
desde fuera me he limitado a
00:48:52
crear mi caja
00:48:55
instanciar el objeto
00:48:57
crear mi caja con el tipo de dato
00:48:59
del que yo dispongo
00:49:01
creo mi caja y la uso metiendo y sacando
00:49:02
y ya está
00:49:05
a mí el site me devuelve feo
00:49:06
Habiendo guardado previamente
00:49:08
Y los añade realmente
00:49:17
Claro, es que si pone 0
00:49:25
Es que no los está añadiendo
00:49:28
A ver si te va a faltar esto de sobreescribir datos por aus
00:49:29
Bueno, necesitéis parar un momentito
00:49:32
Vamos a aprovechar la parada
00:49:42
- 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:
- 21
- Fecha:
- 29 de enero de 2025 - 13:02
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 49′ 45″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 833.31 MBytes