Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Clase 08-03-24 - 2 - 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
00:00:00
Venga, pues nada
00:00:03
Vamos a meter jugadores en la colección
00:00:07
Bueno, como tenemos un constructor
00:00:09
Con parámetros
00:00:19
Podemos hasta hacerlo así
00:00:19
Jugador 1
00:00:22
Nombre
00:00:34
Luis
00:00:39
Vale
00:00:40
Entonces si metemos otro
00:00:54
En esta situación está claro
00:00:57
Que no va a haber ningún problema
00:01:04
Ya tenemos los dos jugadores
00:01:06
Y podemos hacer
00:01:08
Tranquilamente
00:01:13
En la colección
00:01:14
Ahí, vale
00:01:23
Si ejecutamos esto, pues nos va a decir dos
00:01:35
Obviamente, en la colección
00:01:41
Hay dos, vale
00:01:43
Bueno, lo que nos podíamos esperar
00:02:01
Vale, si metemos a este dos veces
00:02:05
Pues hombre, os podéis
00:02:13
Esperar ya con todo lo que sabemos
00:02:20
De clases y objetos
00:02:21
Que en contra de todas nuestras
00:02:23
Intuiciones
00:02:26
me va a seguir diciendo que hay dos
00:02:26
¿por qué?
00:02:29
porque para él no son iguales
00:02:32
no son iguales
00:02:34
la clase jugador
00:02:36
es una clase de la que instanciamos objetos
00:02:37
entonces jugador
00:02:41
yo no le he puesto dentro ningún criterio de igualdad
00:02:43
entonces como no le he puesto dentro ningún criterio de igualdad
00:02:45
tiene el de object
00:02:47
y el de object es
00:02:49
solo son iguales dos objetos
00:02:51
cuando están directamente en la misma dirección de memoria
00:02:53
en la misma
00:02:56
entonces efectivamente para este set
00:02:57
estos objetos
00:03:00
son distintos porque están en direcciones
00:03:01
distintas de memoria
00:03:04
pero eso no se corresponde con la interpretación
00:03:05
real de las aplicaciones
00:03:09
si uno se ha equivocado
00:03:11
y ha metido
00:03:13
dos veces el mismo
00:03:15
lo normal es que esto
00:03:16
lo haya hecho por error
00:03:19
porque si has elegido un objeto
00:03:20
si has elegido un conjunto como colección
00:03:22
tú lo que no querías era que hubiera duplicados
00:03:25
porque no los necesitas, entonces si estás
00:03:27
metiendo al mismo dos veces, lo normal es que lo hayas
00:03:29
hecho por error porque no quieres eso
00:03:31
y este y este son el mismo
00:03:32
y lo tienen que ser porque si tú has decidido
00:03:34
que los jugadores se caracterizan
00:03:37
por número, nombre y equipo
00:03:39
has decidido que eso lo caracteriza
00:03:42
y dos jugadores tienen
00:03:43
el mismo número, nombre y equipo
00:03:45
es que son el mismo
00:03:47
porque si no son el mismo, entonces
00:03:48
has hecho mal el diseño, entonces te falta una cuarta
00:03:51
propiedad, te falta una cuarta
00:03:53
que es la que los caracteriza, si has
00:03:55
decidido esas tres, es porque esas tres
00:03:57
lo identifican, o las tres
00:03:59
o una de ellas o dos
00:04:01
pero no en cualquier caso si las tres son iguales
00:04:03
vale
00:04:05
entonces no queremos que funcione así la aplicación
00:04:07
si yo he escrito esto dos veces es porque
00:04:09
es el mismo obviamente
00:04:11
claro, lo que nos ha faltado como ya sabemos
00:04:12
es que aquí no hay ningún criterio de igualdad
00:04:15
vale, pero aquí ahora
00:04:17
tenemos el problema de que
00:04:19
estos objetos
00:04:21
jugadores van a un
00:04:23
haset, no van a una lista
00:04:25
van a un haset
00:04:27
entonces al ir a un haset
00:04:29
el haset los va a ir ubicando
00:04:31
en una tabla has
00:04:33
con dos pasos, primero le hace una función de has
00:04:35
para ir a una posición de la tabla
00:04:37
y luego a partir de ahí
00:04:38
si ya hay alguien ahí lo va desbordando
00:04:40
con una lista enlazada, lo hace a través de dos pasos
00:04:43
entonces él para
00:04:45
ubicar el objeto
00:04:46
y también para ver si ese objeto
00:04:48
ya existe o no ha pasado
00:04:51
hace función de has
00:04:52
y luego equals, pues hay que ofrecerle esas dos cosas
00:04:54
hay que decirle esas dos cosas, cuál es la función de hash que tiene que aplicar
00:04:58
y cuál es el equals, hay que decírsela, hay que decírsela porque si no el hash
00:05:02
no va a funcionar correctamente, vale, va a usar el de object
00:05:06
y el de object tira de que objetos en direcciones
00:05:10
de memoria distintas son distintos, aunque las propiedades sean iguales
00:05:14
entonces aquí lo que nos faltaría para hacer bien
00:05:18
esta aplicación es en jugador
00:05:22
dado que es un hash set
00:05:24
en jugador, poner esos
00:05:26
dos pasos, el hashCode y el idPath, los dos
00:05:28
entonces ahora
00:05:30
ya sí, pues
00:05:32
nosotros tendríamos que hacer este método
00:05:33
y cuando hacemos el
00:05:38
método, tenemos que decidir
00:05:42
qué es lo que identifica de forma unívoca
00:05:44
a los objetos de mi aplicación
00:05:46
eso de nuevo, es un tema de
00:05:48
análisis de la aplicación, de análisis de la realidad
00:05:50
mis jugadores
00:05:52
si tienen el mismo número son el mismo
00:05:54
no, porque pueden estar en equipos distintos
00:05:56
si tienen el mismo número
00:05:59
entonces que los caracteriza para que sean igual
00:06:00
si tienen el mismo número y el mismo
00:06:03
nombre, son el mismo
00:06:05
nombre no, porque puede haber en diferentes
00:06:06
equipos dos jugadores con mismo
00:06:08
número que se llamen igual, entonces que les
00:06:10
identifica, el mismo número y el mismo
00:06:12
equipo
00:06:15
pues sí, podríamos decidir
00:06:15
podría ser otro, es que esto ya depende
00:06:18
de nuestra aplicación, tendríamos que analizarla
00:06:20
con que estamos trabajando, pero imaginaos que en esta
00:06:22
decimos, vale, pues
00:06:25
cuando yo tengo dos jugadores con el mismo
00:06:27
número y en el mismo equipo, es el mismo
00:06:29
porque no tengo en un equipo
00:06:31
dos jugadores con el mismo número, es imposible
00:06:33
porque así me lo está diciendo el que me ha pedido la aplicación
00:06:35
me está diciendo que no puede
00:06:37
haber en un equipo dos jugadores con el mismo número
00:06:39
pues entonces yo concluiría
00:06:41
vale, pues venga
00:06:43
mi igualdad va a estar basada
00:06:44
en equipo y en número
00:06:47
va a estar basada en equipo y en número, nombre
00:06:48
no hace falta
00:06:51
Pues nada, marcamos las dos
00:06:51
Y él ya me ha generado aquí el hashCode y el equals
00:06:55
El equals lo sabemos de memoria
00:06:59
Ya sabemos que es un método que él sobrescribe de la clase object
00:07:01
Por tanto, respeta su cabecera idéntica de object
00:07:04
Respeta su cabecera
00:07:08
Y ya sabemos lo que hace
00:07:09
¿Vale?
00:07:11
Entonces, usa el método equals este
00:07:13
Al que le pasa equipo
00:07:17
Y este método equals, pues si uno lo mira aquí
00:07:18
ahora ya compara las dos propiedades
00:07:21
la A y la B
00:07:24
vale
00:07:25
entonces
00:07:27
el equals
00:07:30
y el object
00:07:33
que hace, pues llama
00:07:35
él nos implementa esta por defecto
00:07:36
esta por defecto, que uno quiere implementar
00:07:39
otra función de hash
00:07:41
también puede, nos implementa esta
00:07:42
por defecto basada en equipo y en número
00:07:45
nos implementa esta
00:07:48
que uno podría entrar aquí
00:07:49
que es esta de aquí y uno apuntará aquí
00:07:51
a ver cómo lo ha hecho
00:07:54
que lo hace usando este numerito
00:07:56
31
00:07:58
porque es un número primo que optimiza
00:07:58
no sé qué historia
00:08:01
bueno, usa esta implementación
00:08:02
por defecto basada en el número 31
00:08:06
que el número 31
00:08:07
es que cumple una propiedad interesante
00:08:09
no recuerdo la cual es, en matemáticas
00:08:11
de números primos
00:08:13
y usa este porque optimiza no sé qué historias
00:08:14
vale, bueno
00:08:17
nosotros a efectos prácticos nos quedamos
00:08:19
siempre con esta implementación
00:08:21
y ya está
00:08:22
nos quedamos con esta
00:08:24
y ahora ya sí
00:08:26
mi clase jugador
00:08:28
tiene fijado su criterio de igualdad
00:08:31
pero no sólo
00:08:33
el de igualdad genérico
00:08:35
para listas y para todo, sino el de
00:08:37
el hash set, porque el del hash set
00:08:39
es el único que va a dos pasos
00:08:41
el del hash set
00:08:42
usa primero esta y luego esta
00:08:44
cualquier otra
00:08:47
aplicación de java para ver si dos objetos
00:08:49
son iguales, lo que hace es llamar al
00:08:51
equals y ya está, llamar al equals
00:08:53
pero el hashSet
00:08:55
por como está hecha por dentro, necesita
00:08:57
las dos, necesita las dos
00:08:59
luego el hashSet es la única clase que hemos
00:09:01
visto hasta ahora, la única
00:09:03
que para ver si dos
00:09:04
objetos son iguales, necesita
00:09:07
llamar en cadena los dos métodos
00:09:09
jasco de equals, bueno pues
00:09:11
como ya lo tenemos implementado
00:09:13
pues ahora ya
00:09:15
este main, ya sí que no
00:09:17
meterá el segundo, aunque le cambiáramos
00:09:19
de nombre, imaginaos que
00:09:21
le cambiamos de nombre
00:09:25
para el hasher, ahora
00:09:26
este y este son iguales
00:09:29
porque comparten número y equipo
00:09:31
entonces él ya interpreta que
00:09:33
bueno, este puedes meterlo, pero es que
00:09:35
te has equivocado, porque estás metiendo al mismo
00:09:37
otra vez, aunque le des otro nombre
00:09:39
pues si le das otro nombre es porque te has
00:09:41
equivocado, porque le has cogido el nombre de otra manera
00:09:43
pero es que es el mismo
00:09:45
entonces si ahora ejecutamos esto
00:09:46
Pues efectivamente ahora solo ha metido uno
00:09:49
El segundo le ha ignorado
00:09:54
¿Vale?
00:09:56
Pero tenemos que tener los dos métodos implementados
00:09:58
Vamos a quitar el hashCode
00:10:01
¿Vale?
00:10:03
Entonces si quitamos el hashCode
00:10:18
Y volvemos a ejecutar esto
00:10:20
No ha detectado la igualdad
00:10:21
Y el equals está
00:10:26
Pero al hashSet no le vale el equals
00:10:27
Si no tiene el hashCode
00:10:31
Usa el hashCode de object
00:10:33
Y el hashCode de object
00:10:35
objetos diferentes, me da igual
00:10:37
cuáles sean sus propiedades, se van a sitios
00:10:39
diferentes, con lo cual
00:10:41
luego ya ni usaría el equals
00:10:44
entonces, si yo no tengo el hashCode
00:10:45
aunque tenga un equals muy bien hecho
00:10:49
el hashSet me va a funcionar mal
00:10:51
me va a funcionar mal
00:10:53
¿vale?
00:10:55
el hashSet necesita que estén
00:10:56
los dos para detectar la igualdad
00:10:59
los dos, si no tengo
00:11:01
este, nada
00:11:03
¿vale? vale, el hashCode
00:11:04
en realidad
00:11:11
podría ser, repito, cualquier función
00:11:11
de hash que uno haga, siempre y cuando
00:11:16
sea inyectiva
00:11:18
cualquiera
00:11:19
es decir, inyectiva significa
00:11:21
pues bueno, que aún
00:11:24
en el dominio origen
00:11:26
te dé solo un valor, no te puede dar varios
00:11:27
es decir, si a mí me da la gana
00:11:30
hacer una función de hash que sea esta
00:11:32
por ejemplo
00:11:33
pues es una función de hash válida también
00:11:34
pero es muy mala
00:11:37
porque todos los objetos
00:11:40
van a una única posición
00:11:42
con lo cual es como
00:11:44
yo meto el primero ahí
00:11:46
y los demás ya van desbordando
00:11:48
todos son a lista enlazada, entonces esta
00:11:50
combinación
00:11:52
computacionalmente es como una lista enlazada en realidad
00:11:53
pero como
00:11:56
válida es
00:11:58
porque es una función de hash
00:11:59
válida, y si yo ejecuto
00:12:02
esto, pues como veis ha funcionado
00:12:04
perfectamente
00:12:08
solo hay uno, he detectado que son
00:12:09
iguales
00:12:11
vale, solo hay uno aquí, estupendo
00:12:12
ha funcionado bien
00:12:16
lo que pasa es que es una función de hash
00:12:17
repito, que lo que
00:12:20
implica por dentro es que
00:12:22
todos los elementos
00:12:24
van al mismo numerito y a partir de ahí
00:12:25
cuelgan todos de la mano en lista enlazada
00:12:28
pues vaya, no
00:12:30
computacionalmente es una lista
00:12:31
enlazada, ¿para qué?
00:12:34
entonces hombre, mejor usamos la función
00:12:36
de hash
00:12:38
que me ofrece él, que está optimizada
00:12:38
para los casos genéricos
00:12:42
bueno, pues entonces
00:12:44
aquí solamente habría uno
00:12:52
por tanto, si yo a este le cambio el equipo
00:12:56
ahora ya sí que lo metería, porque como es de otro equipo
00:12:57
ahora ya sí que interpreta que hay dos
00:13:03
bueno, pues esto es lo más crítico
00:13:07
en conjuntos, el tener claro
00:13:09
que no admite elementos iguales
00:13:13
y no es que te vaya a dar un error, es simplemente
00:13:15
que no lo mete, no lo mete, ya está
00:13:17
y tú puedes contar con que sí y luego
00:13:19
siete horas después
00:13:21
la aplicación no te ha funcionado
00:13:23
te llega un error y no tienes ni idea de por qué
00:13:25
bueno, porque lleva arrastrando
00:13:26
un error de partida que tú crees que hay unos datos
00:13:28
que no hay, pues hay que saber
00:13:31
cómo funciona, ¿vale?
00:13:32
pues esto es lo más crítico
00:13:35
esto y que para que el headset
00:13:37
interprete la igualdad correctamente
00:13:39
tienen que ser los dos
00:13:41
los que estén, este
00:13:43
y este
00:13:44
porque si no usa los
00:13:46
de object y los de object son
00:13:49
igualdad es la misma dirección de memoria
00:13:50
vale
00:13:52
bueno
00:13:54
vamos a meterle algún
00:13:59
otro para poder recorrer un poquito
00:14:04
más, vale
00:14:05
bueno
00:14:27
entonces esto, si yo quiero recorrer
00:14:30
para consultar solamente
00:14:32
pues puedo
00:14:33
Podemos ser vagos y hacerlo con un for each
00:14:35
¿Vale? Que ya sabéis
00:14:38
Cómo funciona esto
00:14:46
Pues la variable j en cada iteración va siendo
00:14:47
Cada uno de los elementos
00:14:50
Entonces aquí efectivamente me mostrará
00:14:51
Pues
00:14:54
Si mostramos
00:14:55
El nombre y el equipo
00:14:57
Pues me mostrará
00:15:00
Los tres, claro
00:15:09
¿Vale? Esos son los tres jugadores que ha metido
00:15:10
Vale
00:15:20
Aquí no puedo recorrer
00:15:21
No puedo recorrer con un get
00:15:25
ya lo dijimos el otro día final de clase
00:15:27
aquí
00:15:30
jugadores
00:15:31
.get no existe
00:15:33
no existe
00:15:36
jugadores.get por posición, por qué posición
00:15:37
no existe
00:15:40
yo aquí lo que puedo hacer es recorrer y mostrar
00:15:41
lo que hay, pero recuperar el que hay
00:15:44
en una posición no existe, yo los tengo todos ahí
00:15:46
y lo que puedo hacer es
00:15:48
recorrer para ver los que hay
00:15:50
tengo otros métodos para hacer otras cosas
00:15:51
que quiero ver
00:15:54
Si hay un jugador
00:15:56
Que
00:15:58
Que sea de un equipo
00:16:01
Por ejemplo
00:16:04
¿Vale? Vamos a suponer que queremos hacer esto
00:16:05
¿Existe algún jugador de un equipo dado?
00:16:17
Bueno, pues entonces podríamos
00:16:20
Uy
00:16:22
No quiero
00:16:23
Se me ha ido esto
00:16:28
Pues por ejemplo, podríamos decir
00:16:31
Introduzca
00:16:40
Nombre equipo
00:16:44
y ahora leemos el nombre del equipo
00:16:46
vamos a ponerle
00:16:52
lo de leer
00:16:54
y ahora pues
00:16:55
podríamos hacer
00:17:23
tenemos el método contains que funciona exactamente
00:17:24
igual que en listas
00:17:27
si jugadores.contiene
00:17:28
ah no, perdón
00:17:32
contains no porque
00:17:35
para ver si hay un jugador
00:17:36
puede haber más de uno
00:17:40
si contiene un nombre con un equipo
00:17:41
la igualdad no va por equipos
00:17:43
Entonces aquí para hacer esta funcionalidad tendríamos que recorrer, y ahora ya sí, haríamos si j.getEquipo equals el equipo que me han dado, pues entonces ya podríamos poner está igual a true, y ya está, y lo de siempre, y si está, ¿vale?
00:17:45
Entonces, jugadores de este equipo de aquí, puede haber más de uno, puede haber más de uno, ¿vale? Entonces, aquí el contains no aplica, porque el contains es para ver si existe un jugador igual a ese, un jugador igual a ese, y es un conjunto, si existe solo puede haber uno, ¿vale?
00:18:46
entonces, en este caso la igualdad
00:19:08
venía dada por equipo
00:19:10
y número, el contain
00:19:12
se aplicará cuando queremos ver si existe
00:19:14
un jugador de un equipo y un número
00:19:16
concreto, porque ese sí que solamente va a haber uno
00:19:18
vale, entonces
00:19:20
un momento, vamos a probar esto, dándole
00:19:24
Sevilla
00:19:26
por ejemplo
00:19:28
existe
00:19:29
porque me sale, ah
00:19:42
he puesto el ELSE
00:19:44
vale
00:19:45
ahí, vale, efectivamente
00:19:47
me salía así este jugador, luego me decía esto
00:19:52
pero no lo había puesto en el else, claro
00:19:53
vale
00:19:55
entonces ahora
00:19:57
si queremos ver si existe un jugador
00:20:00
con número y equipo
00:20:02
esto ya es otra cosa
00:20:03
número y equipo es lo que define a un jugador
00:20:05
univocamente
00:20:19
es lo que define a un jugador univocamente
00:20:20
entonces aquí sí que podemos usar el contains
00:20:22
porque el contains le das un objeto
00:20:24
y te dice si existe uno igual a ese
00:20:26
igual a ese
00:20:29
y la igualdad se hace
00:20:30
en virtud de número y equipo
00:20:33
entonces aquí
00:20:35
pues si leyéramos
00:20:37
le pidiéramos las dos cosas
00:20:38
número y equipo
00:20:41
le pediríamos las dos cosas
00:20:43
nombre equipo
00:20:45
y ahora pedimos aquí
00:20:47
un tolerante
00:20:48
vale, pues ahora aquí sí que podríamos hacer
00:21:13
nos hacemos
00:21:16
un objeto jugador
00:21:18
no me gusta
00:21:20
Nos hacemos un objeto jugador
00:21:29
Con esos dos valores
00:21:32
Set equipo
00:21:36
Y el número
00:21:44
Y ahora ya sí que podemos hacer
00:21:50
No hace falta recorrer nada
00:21:52
Si jugadores contiene
00:21:54
Uno igual a este
00:21:58
Pues puedo poner el jugador está
00:22:02
Y si no
00:22:06
¿Vale?
00:22:10
Entonces aquí se aplica el contains
00:22:25
El contains ¿Qué hace?
00:22:26
Coge este objeto y mira a ver si hay
00:22:28
alguno igual a ese en esta colección
00:22:30
si lo hay devuelve true
00:22:32
igual a ese que significa que sean
00:22:33
iguales en equipo y en número
00:22:37
nada más, en nombre no
00:22:39
por eso solamente le he fijado el equipo y el número
00:22:40
solo, porque el nombre me da igual
00:22:43
para mirar si es igual a este
00:22:45
solamente va a mirar el equipo y el número
00:22:48
entonces si yo le paso
00:22:49
uno y Madrid me va a decir que sí
00:22:52
y si luego le paso otra cosa me va a decir que no
00:22:55
bueno, esto es para lo primero
00:22:57
que hemos hecho, el jugador está
00:23:05
y era nombre de equipo
00:23:07
pues Madrid y 1, el jugador está
00:23:08
pero si hiciera esto mismo
00:23:14
con cualquier equipo
00:23:15
y ahora introduzca nombre equipo
00:23:19
cualquier equipo 1
00:23:21
pues no está
00:23:22
¿vale? porque este sí pero este no
00:23:24
¿vale? entonces
00:23:27
en cuanto a borrados
00:23:33
el remove
00:23:35
tenemos, por ejemplo
00:23:37
vamos a
00:23:39
eliminar
00:23:40
un jugador
00:23:44
eliminar un jugador
00:23:46
como cada jugador se caracteriza
00:23:48
por
00:23:50
número y equipo, pues vamos a hacer
00:23:51
esta primera versión dado
00:23:54
número y equipo, que es lo que caracteriza
00:23:55
cada jugador, pues vamos a borrar
00:23:58
al jugador 1 del equipo tal
00:23:59
pues vamos a
00:24:02
volver a pedir los datos
00:24:04
vale
00:24:06
y ahora ya podemos
00:24:24
hacer perfectamente
00:24:27
jugadores
00:24:28
punto remove
00:24:30
y
00:24:32
habría que hacer un jugador con estos datos
00:24:34
vamos a volver a
00:24:36
hacer esto otra vez
00:24:38
como esta variable ya está declarada
00:24:40
no hace falta que la declare, la reutilizo
00:24:46
vale, entonces este método
00:24:48
eliminará
00:24:59
un jugador igual a este
00:25:00
según el criterio de igualdad
00:25:03
que es equipo y número, con lo cual el nombre
00:25:05
no se lo hemos fijado aquí porque no lo necesitamos
00:25:07
nuestros datos de entrada eran equipo y número
00:25:09
Entonces este borrará un jugador
00:25:10
Igual a ese, si es que existe
00:25:13
Y si no, no
00:25:15
Entonces vamos a volver a recorrerla aquí
00:25:16
Vamos a volver a recorrer la colección
00:25:19
Para ver si lo ha borrado
00:25:23
Perdón, no era esto lo que yo quería
00:25:24
Copiar
00:25:37
Venga, pues vamos a
00:25:39
A volver a recorrerla
00:25:41
Esto, perdón
00:25:43
Eh
00:26:04
Es que no lo tengo hecho
00:26:09
Este método lo puse solo para
00:26:15
poner la situación en la cual esto importaba
00:26:18
aquí era importante ponerlo
00:26:20
pero es que no lo tengo hecho
00:26:21
vale, pues nada, si hacemos esto
00:26:23
esto era
00:26:26
lo del principio para ver si
00:26:32
existe jugador de este equipo o no, que va a decir que no existe
00:26:33
esto es para
00:26:36
decirme si existe uno
00:26:37
con ese número
00:26:39
y ese equipo que vamos a ponerle
00:26:41
cualquier cosa que va a decir no está
00:26:43
y ahora venía lo de borrar
00:26:45
pues vamos a borrar
00:26:48
de Madrid
00:26:49
al jugador 1
00:26:53
que sí que existía, de Madrid al jugador 1
00:26:55
y efectivamente cuando luego me muestra
00:26:58
lo que hay, no está ya el primero que metimos
00:27:00
porque lo he eliminado
00:27:02
luego el remove me vale para borrar
00:27:03
un objeto igual a otro
00:27:07
si es que existe, si no nada
00:27:09
un objeto igual a otro y se acabó, punto pelota
00:27:11
vale
00:27:13
pero qué pasa si quiero borrar
00:27:15
por ejemplo todos los
00:27:18
jugadores de un equipo
00:27:19
Todos los jugadores de un equipo
00:27:20
No los puedo usar con el remove
00:27:23
El remove es para borrar un jugador igual al que yo le doy
00:27:25
Y el criterio de igualdad exige equipo y número
00:27:28
Entonces si yo quiero borrar todos los de un equipo
00:27:30
No puedo borrar así
00:27:33
¿Vale?
00:27:35
Bueno, vamos a hacer eso
00:27:37
Vamos a suponer que ahora queremos
00:27:38
Eliminar, más que borrar, que queda feo
00:27:40
Todos los jugadores de un equipo
00:27:43
Vale, pues entonces
00:27:50
¿Qué nos podríamos plantear hacer?
00:27:55
¿Qué os plantearíais hacer?
00:27:57
Pues
00:28:00
Podríamos hacer
00:28:01
A ver, lo que pasa es que como
00:28:05
Ya empieza a ser un main muy largo y si luego lo vamos a subir
00:28:06
Para que lo tengáis como ejemplo de set
00:28:09
Lo vamos a sacar a métodos
00:28:10
De añadir, borrar, para que quede más
00:28:12
Más claro todo
00:28:15
¿Vale? Entonces vamos a hacernos
00:28:16
Primero el método
00:28:19
De mostrar jugadores
00:28:21
Para tener el for
00:28:22
Y así dejamos este proyecto colocado
00:28:25
Y repasamos
00:28:27
Venga, pues para mostrar jugadores
00:28:28
Le paso un set
00:28:31
Y que me va a hacer este método
00:28:32
Pues me va a recorrer el set
00:28:33
Para cada jugador
00:28:34
J
00:28:38
En el set que yo le paso
00:28:39
Que me muestre
00:28:42
J.todo
00:28:45
Venga, el número
00:28:47
El
00:28:49
Nombre
00:28:57
Y el equipo
00:29:01
Ala, ya tengo mostrar jugadores
00:29:05
Vale
00:29:11
Vamos a hacer el de
00:29:12
¿Qué más hemos hecho por aquí?
00:29:18
El de insertar jugador
00:29:21
El de insertar jugador
00:29:23
Pues venga
00:29:27
Vamos a hacer
00:29:29
Dado un objeto jugador
00:29:30
Este
00:29:42
Obviamente tiene poco que hacer
00:29:42
Ya lo hemos probado
00:29:47
Que es, ah, y le pasamos la colección
00:29:49
en la que tiene que insertarlo, claro
00:29:52
insertar jugador en esta colección
00:29:53
pues este método
00:29:59
cortito, pero así lo tenemos
00:30:00
aparte, será en la colección
00:30:02
que me han pasado, en la colección
00:30:04
jugadores.add
00:30:06
el jugador j
00:30:08
ya está, vale
00:30:09
ya sabemos como funciona
00:30:12
no inserta los
00:30:14
duplicados, siendo el criterio
00:30:16
de duplicado que el hashCode y el equals
00:30:18
den lo mismo
00:30:20
vale, que más
00:30:22
hemos hecho en el main
00:30:24
pues en el main hemos insertado
00:30:26
y después de insertar hemos mostrado
00:30:29
que ya lo tenemos
00:30:31
puesto en dos métodos
00:30:32
vale, ahora hemos
00:30:34
hecho ver si existe de un
00:30:37
equipo dado, vamos a hacerlo en un método aparte también
00:30:39
aquí static, porque si no voy a poder llamar
00:30:41
pues vamos a hacer
00:30:45
un método boolean, static
00:30:50
también, que sea
00:30:52
existen jugadores
00:30:58
en el equipo que yo le dé
00:31:00
entonces, a este le pasamos
00:31:02
y el set
00:31:06
claro, vale, y aquí
00:31:14
¿qué hemos hecho? pues vamos a
00:31:29
copiar y pegar lo que hemos hecho, ahora lo
00:31:31
repasamos todo para que
00:31:33
vale, pues
00:31:35
hemos pedido nombre de equipo
00:31:37
y hemos hecho este código
00:31:38
vale, o sea, hemos pedido
00:31:43
nombre de equipo
00:31:49
ah, bueno, no, es que se lo estamos pasando por parámetro
00:31:49
perdón, perdón, que se lo estamos pasando por parámetro
00:31:56
Vale, pues hacíamos esto
00:31:58
Y ahora ya return
00:32:01
Está
00:32:02
Este es nuestro método de existir jugadores
00:32:04
Hace el boolean
00:32:07
Y si detecta uno cuyo equipo es igual que el que le paso
00:32:09
True, devuelve
00:32:12
Vale, esto sería para
00:32:13
Ver si existen jugadores de ese equipo
00:32:15
Vale, que más cosas hemos hecho en el main
00:32:17
¿Existe un jugador con número y equipo dado?
00:32:18
Esto hemos hecho
00:32:24
Pues vamos a
00:32:25
Hacer este método
00:32:27
Existe
00:32:31
Jugador, que le vamos a llamar
00:32:41
Al jugador habría que, a este método
00:32:48
Habría que pasarle el número
00:32:49
El equipo, porque son las dos
00:32:51
Cosas que lo caracterizan de forma única
00:32:53
Y luego el set
00:32:55
En el que tiene que mirar
00:32:57
Vale, pues este mucho más fácil
00:32:59
Porque este
00:33:14
Aquí ya sí que se podía hacer el contains
00:33:16
Luego aquí hacemos directamente
00:33:18
Devuelve
00:33:20
Jugadores
00:33:23
Contains
00:33:24
El auxiliar que me he hecho aquí
00:33:26
Vale
00:33:33
Y aquí me falta
00:33:49
Declararlo
00:33:51
Y esto es número
00:33:54
Vale, pues ya tenemos estos cuatro métodos
00:33:57
Mostrar jugadores
00:34:04
Nada
00:34:07
Te recorre el set de jugadores
00:34:08
Y te muestra nombre, equipo, etc
00:34:11
Vale, insertar jugador
00:34:13
Le das un jugador y te lo mete en el set
00:34:15
Vale
00:34:18
¿Existen jugadores en este equipo?
00:34:18
Pues recorremos el array
00:34:23
El set de jugadores
00:34:25
Y avisamos con el boolean si encuentro uno
00:34:27
O no encuentro ninguno
00:34:29
Y devolvemos, vale
00:34:30
¿Existe un jugador igual que este?
00:34:32
Pues creamos un jugador con esos datos
00:34:35
Y devolvemos el resultado del contains
00:34:38
Que será true, si existe uno
00:34:40
Igual a este, falso si no
00:34:41
Vale
00:34:42
Eran estas las cuatro funcionalidades que habíamos hecho en el main
00:34:43
Entonces ahora ya vamos a retocar este main, creamos nuestro haset con estos valores, por ejemplo, mostramos los que hay y ahora ya podríamos, para probar, vamos a ponerle, mostramos datos.
00:34:47
Pues para mostrar los datos
00:35:16
Simplemente tenemos que hacer llamar al método
00:35:20
Que se llamaba
00:35:22
Mostrar jugadores
00:35:25
Ala, ya está
00:35:28
Mostramos datos, esto es lo primero que hicimos
00:35:30
Vale, ¿existe jugador en un equipo dado?
00:35:32
Pues vamos a avisar aquí
00:35:37
Vale, leemos el nombre del equipo
00:35:39
Y ahora ya en lugar de hacerlo de esta manera
00:35:51
Llamamos al método correspondiente
00:35:53
Que el método correspondiente se llama main.existeJugadorDeEseEquipo.
00:35:58
No, no se llamaba así, este era el otro.
00:36:08
ExistenJugadoresEquipos, este era.
00:36:14
Entonces, comprobamos si hay jugadores en un equipo.
00:36:25
Vale, esto es lo siguiente que hemos hecho.
00:36:47
Vale, leemos y ya está.
00:36:51
Ahora, ¿qué es lo siguiente que hemos hecho?
00:36:53
Ver si existe jugador con un número
00:36:54
Y equipo dado
00:36:57
Pues venga, lo ponemos
00:36:59
Vale, y esto como lo hacíamos
00:37:01
Pues en lugar de todo esto
00:37:12
Aquí llamamos
00:37:20
Al método correspondiente
00:37:23
Existe jugador
00:37:25
Ya está
00:37:29
Vale, si existe jugador con este número de equipos jugadores
00:37:29
El jugador está, si no, no está
00:37:36
Eliminar un jugador
00:37:37
Eliminamos jugador
00:37:41
Pues eliminamos jugador
00:37:51
De nuevo, no hay que hacer esto
00:37:55
Si no lo hay que hacer
00:37:57
Eliminamos jugador
00:37:59
Es llamar al método correspondiente
00:38:01
Que era
00:38:02
Existe
00:38:04
Ah, ese no lo tenemos hecho
00:38:08
Eliminar jugador todavía
00:38:12
Venga, eliminar un jugador
00:38:13
Este será
00:38:16
Public static
00:38:18
void
00:38:20
eliminar
00:38:22
jugador
00:38:25
pasándole el número
00:38:26
de jugador y el equipo
00:38:28
que son los dos datos
00:38:30
que lo caracterizaban
00:38:36
y el set
00:38:37
pues eliminar jugador con estos datos
00:38:42
era
00:38:49
ya lo hicimos, nos hacemos un auxiliar
00:38:51
con estos datos
00:38:53
y ahora lo borramos
00:38:57
jugadores
00:38:59
punto remove
00:39:01
hala, ya está
00:39:04
y ahora ya sí creo que tenemos todo lo que hemos
00:39:07
hecho hasta ahora, pero metido en métodos separados
00:39:10
entonces
00:39:12
eliminamos jugador
00:39:15
pues sería main.eliminarJugador
00:39:17
pasándole el número, el equipo
00:39:21
y jugadores, hala, ya está
00:39:24
vale, vamos rápidamente a
00:39:25
probarlo todo por si algo lo hemos escrito mal
00:39:32
ejecutamos nuestro main
00:39:34
vale, hemos metido
00:39:35
los datos, en la colección hay tres
00:39:41
está claro, los que hemos metido, ¿cuáles son?
00:39:43
este, vale, comprobamos
00:39:45
si hay jugadores en un equipo, vamos a ver
00:39:49
si hay jugadores
00:39:51
en Madrid
00:39:53
existe jugador
00:39:55
vamos a ver si existe un jugador
00:39:56
concreto, introduzca
00:39:59
nombre Madrid y
00:40:01
número uno, el jugador está, vale
00:40:03
y ahora vamos a eliminar
00:40:05
un jugador
00:40:06
eliminamos jugador
00:40:07
De nombre equipo
00:40:10
Y uno
00:40:16
Vale, se supone que lo ha eliminado
00:40:16
Pero nos faltaría un de nuevo mostrar datos
00:40:19
Después
00:40:21
Nos falta un de nuevo mostrar datos
00:40:22
Para
00:40:25
Para asegurarnos de que lo ha eliminado
00:40:26
Vale, vamos a volverlo a ejecutar
00:40:36
Con un mostrar jugadores
00:40:41
Después de eliminar jugador
00:40:42
Vale, los tres que hemos metido
00:40:44
Los datos son estos
00:40:52
Vamos a ver si hay jugadores
00:40:54
En este
00:40:56
No existe
00:40:57
No existe este equipo
00:40:59
Vamos a ver si existen jugadores
00:41:01
Aquí
00:41:04
Si existe un jugador como este
00:41:05
Pues no, no existe un jugador así
00:41:09
Y ahora vamos a eliminar este otro
00:41:11
Madrid 1
00:41:13
Efectivamente lo ha eliminado
00:41:15
Vale, pues ya lo tenemos todo ahí recogido
00:41:17
Y ahora
00:41:21
La siguiente cosa que nos queríamos plantear
00:41:26
Ahora en lugar de eliminar uno
00:41:27
Concreto, uno solo
00:41:29
dado número y equipo, que para eso tenemos el remove
00:41:31
ya está, remove
00:41:33
le paso al jugador y me borra uno igual
00:41:35
ahora vamos a hacer otra funcionalidad
00:41:37
que es eliminar todos los jugadores de un equipo
00:41:39
eso no lo podemos hacer
00:41:42
con este método así
00:41:44
porque a este método hay que pasarle
00:41:45
un objeto para que te borre el que sea igual
00:41:47
no el que comparta equipo
00:41:49
el que comparta número, no
00:41:51
el que sea igual a ese
00:41:53
el que sea igual
00:41:55
entonces si quiero borrar todos los de un equipo
00:41:56
no puedo usar este método
00:41:59
Porque tengo que pasarle
00:42:00
Un equipo y un número
00:42:02
Para que me borre el que sea igual según equipo y número
00:42:04
Bueno, vamos a hacer ese método
00:42:06
Eliminar jugadores
00:42:08
De un equipo concreto
00:42:16
Entonces a este
00:42:17
Habrá que pasarle
00:42:20
Un equipo
00:42:21
Y el set de jugadores con los que trabajar
00:42:23
Porque como es local al main
00:42:26
Se lo tenemos que pasar
00:42:27
Vale, venga
00:42:29
Vamos a parar aquí un momentito
00:42:43
Bueno
00:42:46
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 12
- Fecha:
- 10 de marzo de 2024 - 14:22
- Visibilidad:
- Público
- Centro:
- IES ROSA CHACEL
- Duración:
- 42′ 48″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 224.12 MBytes