Saltar navegación

20250204 HashSet_2 - 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 4 de febrero de 2025 por Raquel G.

8 visualizaciones

Descargar la transcripción

silencio 00:00:00
antes de que Ana baje la pantalla 00:00:02
venga, ahí nos de mucho miedo 00:00:04
bueno, pues la función de hash 00:00:06
ha hecho la que le ha salido de ahí 00:00:08
y nos la creemos porque es que no sabemos 00:00:10
hacer funciones de hash optimizadas 00:00:12
a los requisitos de nuestra aplicación 00:00:14
ahora ya sí 00:00:16
ahora volvemos a ejecutar esto 00:00:18
y ahora ya 00:00:20
sí que no me ha dejado meter el duplicado 00:00:22
y no me ha dicho nada 00:00:24
yo he hecho dos add 00:00:26
no me ha dicho nada 00:00:28
¿vale? pero ad 00:00:29
si yo quiero comprobar si la inserción 00:00:34
ha sido efectiva o no 00:00:36
veréis que ad devuelve un boolean 00:00:37
lo sabemos, lo vimos ayer 00:00:40
ah, vale, vale, vale 00:00:42
te devuelve un boolean para ver 00:00:44
si la inserción ha sido efectiva o no 00:00:46
¿vale? en el caso de la lista 00:00:48
los ad van a ser 00:00:50
efectivos siempre, salvo 00:00:52
casos muy 00:00:54
pero en el que haya un error 00:00:55
de excepción, de lo que sea 00:00:58
pero en el caso de los set 00:01:00
aquí sí importa 00:01:01
controlar el boolean 00:01:02
porque tú aquí crees 00:01:03
que estás metiendo 00:01:05
un montón de alumnos 00:01:05
y han metido el primero 00:01:06
porque te hace 00:01:07
que estás repitiendo 00:01:08
los nips 00:01:08
sin darte cuenta 00:01:09
lo que sea 00:01:10
¿te devuelve 00:01:10
si es repetido? 00:01:11
claro 00:01:13
claro 00:01:14
vamos a meter esto 00:01:14
o sea yo puedo meter esto 00:01:15
en un siso 00:01:16
para controlar 00:01:17
meto en un siso 00:01:18
el primer add 00:01:20
pero yo lo ejecuté 00:01:20
y me salieron 00:01:25
los dos alumnos 00:01:25
entonces que se repiten 00:01:26
primero 00:01:27
pero has puesto 00:01:28
el hashcode 00:01:28
y el equals 00:01:29
Claro, es que te has saltado 00:01:29
No, no, es que lo hice antes 00:01:33
Ah, bueno, vale 00:01:36
Vale, ¿qué iba a hacer yo? 00:01:38
Y ponemos este SISO también aquí 00:01:41
Vale, entonces 00:01:43
Efectivamente 00:01:53
La segunda inserción no se hizo 00:01:55
No es que haya habido un problema 00:01:56
Sino simplemente que tú has intentado meter un duplicado 00:01:58
Entonces puedes llevar el control 00:02:01
Si quieres, de las inserciones efectivas 00:02:03
Que hay 00:02:05
¿Vale? 00:02:06
Entonces 00:02:10
Vamos a meter por ejemplo 00:02:11
Un alumno 00:02:22
De NIF 0 00:02:24
Ahora si meto un alumno 00:02:25
De NIF 0 00:02:30
A ver que me distraes 00:02:30
Ahora si metía un alumno de NIF 0 00:02:33
Aunque sea este 00:02:35
Si me lo va a meter 00:02:37
¿Vale? Sí, hasta el fondo 00:02:38
Y lo que pasa es que 00:02:41
Estaba buscando forzar 00:02:43
Que vierais que el orden 00:02:44
De iteración 00:02:47
No es el que yo inserté, aquí se ha coincidido 00:02:48
Pero si yo, no tiene 00:02:52
Por qué, tú vas metiendo 00:02:53
Alumnos, claro, y cuando 00:02:55
Tú vas metiendo, tú vas iterando 00:02:57
Te van saliendo, vas sacando 00:02:59
De la caja en un orden que no tiene nada que ver 00:03:01
¿Vale? 00:03:03
ahí sí que viene la única 00:03:04
diferencia entre el hash set 00:03:07
y el linked hash set 00:03:10
hay dos implementaciones de 00:03:11
bueno, hay tres de set 00:03:13
recordad que he escrito al principio 00:03:14
hash set y linked hash set 00:03:17
las dos se implementan por abajo con una tabla 00:03:19
hash, en las dos hay que hacer el hash code 00:03:22
y el equals, las dos son iguales 00:03:23
pero el linked hash set 00:03:25
te mete algo más 00:03:27
para que el orden de iteración 00:03:29
sea el mismo que el de inserción 00:03:31
es la única diferencia 00:03:33
entonces si a ti te importa en la aplicación que sea 00:03:35
porque tienes una interfaz gráfica 00:03:38
que cuando tú vas a mostrar en un desplegable 00:03:39
los alumnos, lo vas a hacer 00:03:42
recogiendo del set y quieres que se muestre 00:03:44
en el orden en el que los insertaste 00:03:46
si te importa 00:03:47
que en el orden de iteración 00:03:48
sea el mismo que el orden en el que tú metiste 00:03:52
si te importa, pues haz un link 00:03:53
en hashet, si no te importa 00:03:55
haz un hashet y ya está 00:03:58
¿vale? 00:03:59
entonces lo vamos a escribir aquí 00:04:01
el orden en el que 00:04:02
aparecen 00:04:15
¿vale? 00:04:53
pues en realidad nos quedamos 00:04:54
iteración 00:04:56
con que esa es la única diferencia 00:04:58
conclusión 00:04:59
del link de haset pues ya pasamos 00:05:01
no vamos a mencionar nada más de él porque es igual que el haset 00:05:04
salvo que cuando iteramos por él 00:05:06
se conserva el orden, ya está 00:05:08
entonces cuidadín 00:05:10
porque si 00:05:12
si viniéramos de una clase que alguien nos ha dado 00:05:14
por ahí que la estuvo usando en listas 00:05:16
y que esto no lo tenía 00:05:18
porque el hasco no lo tenía aunque tuviera 00:05:19
el equals 00:05:22
esto va a seguir 00:05:23
sin distinguir 00:05:25
la igualdad correctamente 00:05:27
luego el hash set usa los dos 00:05:28
primero el hash code 00:05:31
y luego el equals, el hash code para 00:05:33
la posición del array 00:05:35
y el equals para la posición en la lista 00:05:37
entonces necesitamos los dos 00:05:39
si uno me falta, esto otra vez va a volver 00:05:41
a no hacérmelo 00:05:43
por ejemplo vamos a meter dos con 00:05:45
nif1, vamos a meter dos con 00:05:47
nif1 y yo el hash code no lo he hecho 00:05:49
Porque es de una trampa pelada 00:05:51
O viene de otro sitio, lo que sea 00:05:52
Pues como veis he metido los dos 00:05:54
Porque no he detectado que son duplicados 00:05:56
Aunque el equals, sí 00:05:58
Pero el hashcode del equals solo no le vale 00:06:00
Hace primero el hashcode y luego el equals 00:06:02
Y lo mismo, si yo tengo solo el hashcode 00:06:04
Y el equals no 00:06:07
Puedes usar una función del alumno con 00:06:07
Nib1 00:06:10
Por ejemplo, crear una función en cualquiera 00:06:11
Esta 00:06:14
Uy, perdón 00:06:16
Quiero que uses una función 00:06:17
desde un alumno que está dentro de esa 00:06:20
no te refieres 00:06:23
a que implemente yo esto, otra cosa 00:06:25
que accedas a ese alumno 00:06:26
y usas una función de ese alumno 00:06:29
del alumno probablemente 00:06:30
cualquier función 00:06:32
crea una función cualquiera 00:06:34
un método en alumno, te refieres a un método cualquiera 00:06:36
pues como por ejemplo 00:06:39
un método cualquiera que me devuelva 00:06:41
Vuelva y que me haga, uy, soy este de aquí. 00:06:43
Vale. 00:07:04
Entonces. 00:07:06
El alumno con dos NIF distintos. 00:07:07
Vale, agrego el alumno de NIF 1 y el alumno de NIF 2. 00:07:11
Y ahora usa el método de alumno de NIF 2. 00:07:15
Vale, tengo que iterar. 00:07:18
Ese es el asunto, que tengo que iterar. 00:07:20
No puedo decir, dame el alumno de NIF 2. 00:07:21
Eso es. 00:07:24
¿Vale? Tengo que iterar 00:07:25
¿Pero creas un alumno apuntando a null 00:07:27
y luego guardas ese alumno? 00:07:29
No, haría esto 00:07:31
a equals 00:07:33
efectivamente 00:07:36
me haría yo aquí 00:07:39
ahora 00:07:40
o bueno, no hace falta 00:07:41
puedo hacerlo más sencillo 00:07:44
Claro, si a 00:07:46
punto getNif 00:07:48
punto equals 00:07:51
el NIF que te han dado 00:07:54
el que sea, imagina el de 2 00:07:55
pues ya está 00:07:58
pues entonces apunto, saluda 00:07:59
¿vale? 00:08:02
esta es la manera en la que lo podrías hacer 00:08:04
¿vale? 00:08:06
no hace falta que te hagas un alumno 00:08:08
y que apliques él 00:08:09
entonces si tú haces esto, pues te va a saludar 00:08:11
el segundo que hemos metido 00:08:14
efectivamente 00:08:16
para modificarlo 00:08:18
efectivamente tienes que iterar 00:08:20
esa es la desventaja del set 00:08:22
iterar desde for each y poner a.set 00:08:23
nombre y le modifica 00:08:26
efectivamente 00:08:27
el problema del set es que para localizar 00:08:29
a uno concreto, como están todos a mogollón 00:08:32
tienes que iterar dentro 00:08:33
y buscarle 00:08:35
bien con el equal si te has creado un igual a él 00:08:37
bien con el nif, entonces precisamente 00:08:40
para localizar 00:08:42
de forma más fácil 00:08:44
porque claro, la pega que tiene el hash set es estupenda 00:08:45
porque están todos a mogollón, no tengo que llevar un registro 00:08:48
de la posición, eso es más cómodo 00:08:50
la estructura de una tabla has 00:08:52
con enlaces es óptima 00:08:54
vale, pero esta es la pega 00:08:55
que para localizar yo a uno 00:08:58
y sacarlo, tengo que mirarlos todos 00:08:59
y es un rollo 00:09:02
entonces, para 00:09:03
optimizar esto 00:09:05
es para lo que se hacen los 00:09:07
mapas 00:09:09
que los mapas son, yo tengo mi caja 00:09:10
pero 00:09:13
a cada objeto que está en mi caja 00:09:15
con todas las ventajas de la 00:09:17
caja, de que es una tabla has, todo eso 00:09:20
les asocio una clave 00:09:21
y que en este caso sería el nid 00:09:24
y ahora le digo 00:09:28
sácame el objeto de clave tal 00:09:30
y no tienes que iterar 00:09:32
pues por eso están geniales los mapas 00:09:33
¿vale? 00:09:36
muy rápidamente 00:09:38
cuando tengamos esto un poco más suelto 00:09:40
¿vale? 00:09:42
¿tú quieres? 00:09:43
dime 00:09:46
oye, John, sé más educado 00:09:46
de verdad, no me extraña que no quieran 00:09:50
contratar, dime 00:09:54
en un linked list 00:09:56
tú puedes recuperar por posición 00:10:00
el 3 00:10:01
pero si quieres encontrar el que cumple 00:10:03
una condición como Sunit, tienes que tirar también 00:10:06
claro, lo que pasa es que te aporta 00:10:08
el recuperar el primero 00:10:12
o el tercero, o el quinto 00:10:14
pero si quieres recuperar 00:10:15
dame el primero, dame el quinto 00:10:17
porque tiene una posición, pero si quieres 00:10:20
recuperar por contenido 00:10:22
tienes que iterar igual, iteras 00:10:23
a ver cuando encuentras aquel cuyo contenido 00:10:26
es el que te interesa 00:10:28
¿vale? si tú quieres localizar 00:10:29
por contenido tienes que iterar 00:10:32
me da igual que sea un set que un list 00:10:34
si fuera un mapa no, porque dices 00:10:35
dame el de la clave tal 00:10:38
que la clave ya tiene parte del contenido 00:10:39
¿vale? 00:10:42
lo único que el list, eso, el list te permite 00:10:44
sacar por posición 00:10:46
sin tener que iterar 00:10:48
dame el cuarto, por ejemplo, si tú sabes que el cuarto 00:10:50
es el que quieres, claro 00:10:52
get y la posición 00:10:53
pero claro, tienes que saber las posiciones 00:10:56
claro, claro 00:10:57
este no tiene, yo aquí no podría iterar 00:11:00
no podría, si yo aquí hago 00:11:02
alumnos 00:11:04
trato de hacer el primero 00:11:06
que metí, get 0, me dice 00:11:08
pero ¿qué me estás contando? el método get 00:11:10
no existe en hashed 00:11:12
¿vale? entonces 00:11:13
por ejemplo 00:11:16
yo quiero 00:11:17
eliminar 00:11:19
vamos a eliminar, vale, esto de la 00:11:21
iteración y la necesidad del jasco de 00:11:24
equals está claro, ¿no? Vamos a hacer 00:11:26
ahora 00:11:28
eliminar el alumno 00:11:28
de mif 00:11:32
el que sea, uno 00:11:33
por ejemplo, o uno que me han pasado por parámetro 00:11:35
el que sea, vamos a eliminarlo 00:11:38
vale, pues ¿cómo elimino yo 00:11:39
de un set? 00:11:41
pues si miramos los métodos que me 00:11:43
ofrece set, pues tiene 00:11:46
el método remove 00:11:47
y a remove 00:11:48
que hay que pasarle 00:11:51
hay que pasarle un objeto 00:11:52
alumno que sea 00:11:56
igual que el que quiero 00:11:58
eliminar 00:12:00
¿vale? 00:12:01
justo 00:12:05
eso 00:12:05
porque así funciona remove 00:12:08
le pasas un objeto, entonces 00:12:15
oye, pues como mi jasco de equals 00:12:17
que aquí importantísimo 00:12:20
como es un haset, jasco de i 00:12:21
pues van los dos de la mano 00:12:23
tira solo de nif 00:12:25
pues yo le paso esto 00:12:26
ah vale 00:12:29
vale, ni olivia, aquí le paso lo que me dé la gana 00:12:33
es que me da igual 00:12:35
vale 00:12:36
vale 00:12:38
pues que te hace remove 00:12:41
remove 00:12:42
busca dentro de la caja 00:12:44
un objeto 00:12:47
igual que este 00:12:49
que significa igual 00:12:50
que la sucesión de Hasco de Equal 00:12:52
es de True 00:12:55
pero como Hasco de Equal 00:12:56
tiran solo de NIF 00:12:59
porque Hasco de Equal tienen que estar coordinados 00:13:00
los dos, si Hasco tira de NIF 00:13:03
justo, como tira solo de NIF 00:13:04
yo aquí pongo lo que me dé la gana 00:13:07
vale 00:13:09
pongo lo que me dé la gana 00:13:10
si un segundinín como si pongo NULL 00:13:13
un segundito 00:13:15
el remove 00:13:17
te devuelve, supongo que sí 00:13:22
te devuelve un boolean 00:13:24
que te dirá true si ha hecho un borrado efectivo 00:13:26
o no 00:13:29
entonces 00:13:29
claro, esto es mucho mejor que los arrays 00:13:32
lógicamente 00:13:36
muchísimo mejor 00:13:37
¿qué ibas a decir? 00:13:41
A ver, lo comenté para que comprobáramos que si solo está uno de los dos y no están los dos, 00:13:43
el hash set no es capaz de identificar la igualdad, no funciona. 00:13:55
Entonces, si el hash code no está y yo le pasara dos objetos del mismo NIF, para él no son iguales, 00:13:59
porque él solo es capaz de identificar la igualdad si están los dos, hash code de igual. 00:14:07
El list no 00:14:11
El list con que esté el equals 00:14:13
Ya le vale para la igualdad 00:14:15
Pero ese es el casco de equals 00:14:17
Vale 00:14:19
Y set tiene un montón de métodos 00:14:20
Que son para mil cosas 00:14:23
Para ver si la colección contiene uno igual a otro 00:14:24
El contains 00:14:27
Para mil rollos, vale 00:14:28
Que iremos explorando las diferentes aplicaciones 00:14:30
Vale 00:14:32
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:
8
Fecha:
4 de febrero de 2025 - 17:23
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
14′ 39″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
62.10 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid