20260210 EjerColecciones_2_Comparable - 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:
Vamos a hacer el método de mostrar un listado alfabético.
00:00:01
Vamos a entender primero la aplicación.
00:00:07
La aplicación tiene la clase alumno, por ahora esto lo vamos a quitar,
00:00:10
porque como tu lucidez no ha dado para completarlo, pues lo quitamos.
00:00:13
Tenemos nuestro alumno con NIF nombre y nota, constructores, get y set,
00:00:18
Hasco de Equals
00:00:23
Por
00:00:25
Por NIF
00:00:25
Y este que lo vamos a quitar
00:00:28
Porque
00:00:31
No vale para nada
00:00:31
Vale, la clase alumno
00:00:34
Te la aprobamos
00:00:37
Vale
00:00:38
Me gustaría en tu stream
00:00:39
De Yasmín
00:00:43
Vale, la clase alumno ya está, te la aprobamos
00:00:44
Venga, clase profesor
00:00:47
Clase profesor tiene una lista de alumnos
00:00:48
Vale
00:00:52
yo aquí
00:00:52
a menos que vayas a usar
00:00:55
los métodos específicos de linked list
00:00:58
el push, el pull
00:01:00
yo aquí no pondría linked list
00:01:02
pondría list directamente
00:01:04
hace el código un poquito más legible
00:01:06
¿vale?
00:01:09
constructor
00:01:11
get set
00:01:12
aquí por tanto
00:01:14
get set
00:01:15
y luego has puesto algunos métodos del tipo
00:01:20
Vamos a ver todos los alumnos de la lista
00:01:23
Has recorrido la lista
00:01:25
Más cómodo
00:01:27
De escribir
00:01:33
En este momento
00:01:34
Que solamente vas a recorrer para mostrar
00:01:35
Más cómodo que lo hagas con un for each
00:01:37
Directamente
00:01:40
Que no con un for de índice
00:01:40
Y si alumno tiene tu string
00:01:42
Que lo tiene
00:01:47
Si alumno tiene tu string
00:01:48
Puedes
00:01:50
Tirar
00:01:52
Si es solamente para verlos
00:01:54
puedes tirar del
00:01:55
toString de list
00:01:57
y hacer directamente system.out.println
00:01:58
alumnos.
00:02:02
Porque el toString de list ya te
00:02:03
hace un mostrado bastante apañado de los
00:02:05
elementos de una lista. Llamando a
00:02:07
los toString de alumnos.
00:02:09
Pero vamos, que esto está bien igualmente.
00:02:11
Vale, en profesor vamos
00:02:14
a buscar un alumno
00:02:15
dado su NIF. Pues
00:02:17
recorres y lo devuelves.
00:02:20
Vale,
00:02:24
Dos retun, dos puntos de salida
00:02:25
No pasa nada
00:02:27
Feo, pero no pasa nada
00:02:29
Al final acabamos programando un poco así
00:02:31
¿Vale?
00:02:34
¿Esto es lluvia?
00:02:35
Porcentaje de aprobados
00:02:38
Yo aquí añadiría
00:02:39
Si alumnos es
00:02:43
Igual a nul
00:02:48
O
00:02:51
Mucho mejor
00:02:53
porque a ver, tú sabes
00:02:55
en principio que esta colección
00:02:59
la has inicializado
00:03:01
pero en realidad no sabes en qué momento vas a acabar
00:03:03
llamando a este método, igual llamas a este método
00:03:05
habiendo puesto alguien esa colección
00:03:07
a nul, habiendo tenido esa
00:03:09
buenísima idea
00:03:11
entonces esta verificación es mucho mejor
00:03:12
y más habitual
00:03:15
si alumnos es nul o
00:03:16
sin ser nul, su tamaño es cero
00:03:19
no hay porcentaje de aprobados
00:03:21
y si su tamaño no es cero
00:03:23
pues ya sumas
00:03:27
los aprobados y los divides entre el total
00:03:28
y lo conviertes a
00:03:31
double, la división
00:03:33
pero, a ver
00:03:35
conviertes
00:03:37
a double después
00:03:39
con lo cual esta división
00:03:41
es la división entera, porque se está haciendo
00:03:43
división entre dos enteros, esta convención a double
00:03:45
no te vale para nada, ¿vale?
00:03:47
si quieres con decimales tendrías que convertir a double
00:03:50
O bien aprobados
00:03:52
O bien alumnos.6
00:03:55
Uno de los dos
00:03:56
Entonces ya la división se convierte en división con decimales
00:03:56
Y ya no tendrías este casting
00:04:00
Es decir, estos paréntesis
00:04:01
Así
00:04:04
Por ejemplo, ya está
00:04:06
Simplemente eso
00:04:08
Porque entiendo yo que el operador va antes del casting
00:04:09
A lo mejor no, a lo mejor me estoy
00:04:15
Colando
00:04:16
Y primero hace el casting
00:04:17
Y luego ya hace la división
00:04:19
No lo sé
00:04:25
Pero yo creo que
00:04:27
En cualquier caso
00:04:28
Esto es más seguro
00:04:31
Pero bueno, se podría comprobar
00:04:34
Para ver exactamente qué hace
00:04:36
Si primero hace la división y luego el casting al revés
00:04:37
Vale
00:04:40
¿Tenemos un alumno con ese NIF?
00:04:41
Pues esto está bien
00:04:45
Porque no ha salido con un retún por medio
00:04:46
Está muy bien
00:04:48
¿Eh?
00:04:50
Vale
00:04:52
Punto string, eliminar alumno
00:04:53
¿Creas un alumno con el criterio de igualdad?
00:04:55
fuera, borrado
00:04:57
y ahora, ahora viene lo que nos interesa
00:04:58
y lo que nos gusta
00:05:02
vamos a hacer un listado
00:05:03
de alumnos alfabéticamente ordenados
00:05:05
pues esto sería tan bonito
00:05:07
como ordenar la lista
00:05:10
ordenar la lista
00:05:11
para eso hay ya algoritmos de ordenación
00:05:13
ya
00:05:16
planteados, como el de la burbuja
00:05:16
el quizor, que no tenemos tiempo para ver
00:05:19
cómo funcionan por dentro
00:05:21
que ya están programados dentro de métodos
00:05:23
Entonces, mi objeto alumnos, por ser una lista, tiene un método sort, ¿vale?, que me ordena, ¿vale?, tiene un método sort que me ordena, alumnos, ¿vale?
00:05:26
Entonces, el método sort me está diciendo que le pase un criterio de comparación, pero yo puedo ignorarlo y decir, no, no te paso ningún criterio de comparación,
00:05:42
porque el criterio de comparación ya lo voy a guardar
00:05:59
en la clase alumna
00:06:02
¿Vale? Ese sería el plan A
00:06:03
El plan B sería no guardar el criterio
00:06:05
en la clase alumno y pasárselo por aquí
00:06:08
Vamos a hacer primero el plan A
00:06:10
Plana, quiero dar a los alumnos
00:06:11
Primera pregunta que me hago
00:06:14
¿Quiero que se queden ordenados de por vida?
00:06:16
¿O solo quiero mostrar el listado alfabético
00:06:18
pero quiero que los alumnos se queden
00:06:20
en el orden de inserción que estaban?
00:06:22
¿Vale?
00:06:25
Pues entonces, depende de lo que yo quiera
00:06:26
porque el método sort
00:06:28
¿qué es lo que hace?
00:06:30
la lista
00:06:32
¿vale?
00:06:33
te la deja ordenada
00:06:38
entonces si no queremos que la deje ordenada
00:06:39
si lo que queremos es solo para el listado
00:06:42
pues entonces podríamos copiar
00:06:44
alumnos en otra lista
00:06:46
y ordenar esa ¿vale?
00:06:48
pero bueno, vamos a ordenarla
00:06:50
sin más
00:06:52
vale, alumnos.sort
00:06:53
y ahora yo
00:06:57
ya la recorrería
00:06:58
mostraría
00:06:59
vale, entonces
00:07:02
ah, que me devuelve la lista ordenada
00:07:12
vale, retun alumnos
00:07:14
bueno, no
00:07:16
que la devuelva, y luego la
00:07:18
es que lo mejor es devolverla y no hacer aquí el siso
00:07:19
eso es lo mejor realmente
00:07:22
retun
00:07:23
alumnos
00:07:26
vale, pues entonces
00:07:27
tú tienes en tu
00:07:32
main unas pruebas
00:07:34
hechas o algo, un menú
00:07:36
y cuáles
00:07:37
todas las funciones del menú te funcionan
00:07:39
¿no? insertar profesor
00:07:42
alargar nuevo alumno, poner nota, mostrar
00:07:44
alumno enfáticamente, las 6 es
00:07:46
¿vale? entonces vamos a suponer que
00:07:48
vamos a ejecutar esto
00:07:50
insertamos
00:07:52
profesor, nif
00:08:01
y nombre, ahí te falta
00:08:03
el next line
00:08:06
vale, pues venga
00:08:08
vámonos a salir
00:08:10
¿con qué se sale?
00:08:11
Vale, pues nos falta
00:08:12
Next in
00:08:20
Y ahora nos queda aquí el next line
00:08:23
¿No? Vale, ejecutamos
00:08:25
Otra vez
00:08:35
Vamos a insertar un profesor
00:08:36
Nib del profesor, Pepe, nombre del profesor
00:08:39
Pepe, nombre
00:08:44
Ala, ya está
00:08:45
Vamos a agregarle un alumno, dos
00:08:48
Para que los ordene alfabéticamente
00:08:51
nif del alumno
00:08:52
1, 2, 3, 4
00:08:55
nombre del alumno
00:08:56
Pepito
00:08:57
nif del profesor a quien se lo quiero agregar
00:08:59
a este
00:09:06
no se ha encontrado el profesor
00:09:06
ya te hemos encontrado un pedazo de bug
00:09:10
no se ha encontrado
00:09:12
el profesor con ese nif
00:09:14
y yo le he pasado un profesor
00:09:15
cuyo nif es este
00:09:17
esto ha fallado en la opción
00:09:19
agregar nuevo alumno a un profesor
00:09:23
Vamos a ver, vamos a agregar nuevo alumno a un profesor, NIF del profesor, aquí lo lees, y ahora llamas a buscar profesor con ese nombre, buscar profesor, recorres la colección de profes, si su NIF, vale, aquí podrías ahorrarte todo esto y poner un equals, ¿no?
00:09:25
Ah, vale
00:09:55
Ah, bueno, vale
00:09:58
Pero podrías haberlo puesto
00:10:01
Entonces, ReptumProfes
00:10:02
Y voy a hacer
00:10:05
.size
00:10:06
Y ahora
00:10:07
Los datos, ¿dónde los tienes?
00:10:09
En el main
00:10:12
Los datos los tienes aquí en el main
00:10:13
¿No? En tus profes
00:10:17
Vale, y tú cuando agregas el profe
00:10:17
Lo has agregado de verdad
00:10:21
Vamos a ver
00:10:22
profes has agregado de verdad
00:10:23
entonces
00:10:27
main buscar profesor
00:10:29
es igual al if que me han dado
00:10:33
vale, y ahora
00:10:44
en tu main
00:10:46
cuando llamas aquí
00:10:48
si
00:10:59
aux
00:11:00
no es null
00:11:00
añades a los alumnos de aux
00:11:02
El alumno, y si no nos ha encontrado
00:11:05
Aquí está entrando en el else, es decir
00:11:07
Aux está siendo null
00:11:09
¿Por qué está siendo aux null?
00:11:11
¿Por qué está siendo null?
00:11:24
Estás recorriendo esta colección
00:11:25
¿Verdad?
00:11:27
Que está aquí arriba
00:11:29
A ver, vamos a volverlo a ejecutar
00:11:30
Nif, uno, dos, tres y cuatro
00:11:37
Nombre
00:11:41
Ya está
00:11:43
Agregar alumno
00:11:45
2, 2, 2, 2
00:11:47
Nombre del alumno
00:11:49
Nif del profesor
00:11:51
A quien se lo queremos agregar
00:11:53
1, 2, 3 y 4
00:11:54
No se ha encontrado el profesor
00:11:57
Bueno, es que en el print
00:12:00
Aquí en el caso 3
00:12:06
Este print sale solo
00:12:09
En el else de este aux
00:12:13
Con lo cual solo si aux es igual a null
00:12:15
Con lo cual
00:12:17
Este método te está devolviendo nulo
00:12:18
Entonces vamos a ponerle aquí
00:12:20
Esto no se hace
00:12:22
Se debuguea, ¿vale?
00:12:24
No se pone en System.Auth
00:12:26
Se hace el debug
00:12:28
Pero como nosotros
00:12:31
Estamos por encima de todo eso
00:12:32
¿Vale?
00:12:35
Vamos a ver el nif del profesor que le pasamos
00:12:38
Eso lo pasamos correctamente
00:12:40
Vamos a ver
00:12:42
Vamos a salir de aquí
00:12:43
Cerrando
00:12:48
Ejecutamos
00:12:52
1, 2, 3 y 4
00:12:53
2, agregar alumno
00:12:58
1, 1, 1, 1
00:13:03
Nombre de alumno, NIF del profesor
00:13:04
1, 2, 3 y 4
00:13:07
Lo coge correctamente
00:13:09
1, 2, 3 y 4
00:13:14
Y ahora cuando llama este método
00:13:16
O sea, esto está claro
00:13:18
Cuando llamamos
00:13:20
Este método
00:13:22
A ver si cuando instancias el profesor
00:13:23
Lo instancias con el nombre y el nif cambiado
00:13:46
Que no sería la primera vez que pasa
00:13:49
Le cambias el nif por nombre
00:13:50
A ver, primero nif y luego nombre
00:13:54
Dis.nif igual a nif
00:13:56
Pues vamos a ver cuando agregas profe
00:13:58
Cuando agregas profe
00:14:00
Míralo
00:14:04
Aquí está el error
00:14:06
Buen ejemplo de que los errores de una zona
00:14:08
suelen venir por cosas que están
00:14:11
completamente alejadas
00:14:13
e impensables
00:14:15
que cuando construía el profesor
00:14:16
le pasa el nombre donde tiene que ir el NIF
00:14:19
y el NIF donde tiene que ir el nombre
00:14:22
entonces uno efectivamente se está 20 años con esto
00:14:23
pero cuando ya le pasa una vez ya no le vuelve a pasar
00:14:30
¿vale? buena enseñanza
00:14:33
¡qué vergüenza!
00:14:35
¿ves? si ya sabías que te ibas a ir humillada
00:14:38
1, 2, 3 y 4
00:14:40
2
00:14:43
agregamos nuevo alumno, nid del alumno
00:14:47
1, 1, 1, 1
00:14:49
Juanito
00:14:51
1, 2, 3 y 4
00:14:52
a ver
00:14:54
que feo
00:14:57
alumno agregado correctamente
00:14:58
vale, pero salvo por alumno
00:15:01
agregado correctamente se supone que ya está
00:15:03
y ahora
00:15:05
vamos a agregarle otro
00:15:07
para ordenar alfabéticamente
00:15:09
que como sabemos que no va a funcionar
00:15:10
venga, vamos a agregar otro alumno
00:15:13
nivel alumno, 2, 2, 2, 2
00:15:14
vamos a llamarle a este
00:15:16
que vaya
00:15:19
antes para que los cambie
00:15:20
esta se llama Ana
00:15:22
nivel
00:15:25
1, 2, 3 y 4
00:15:27
agregado
00:15:28
ahora
00:15:30
si llamamos a la opción
00:15:34
6
00:15:37
la de mostrar a los alfabéticos no entordenados
00:15:37
que es la que llama al sort
00:15:40
Si llamamos a la función 6
00:15:41
¿Vale?
00:15:44
No ha hecho
00:15:46
Espérate, es que debería haber dado un error
00:15:47
En lugar de no hacer nada
00:15:49
Ah, es que la función 6
00:15:51
Vale, en la función 6 lo que nosotros querríamos hacer sería
00:15:53
Un siso de
00:15:56
De
00:15:58
Lo que nos devuelve el método
00:16:00
Que el método está en profesor, ¿verdad?
00:16:03
Entonces
00:16:06
¿Verdad?
00:16:07
de un profesor. Ah, bueno, habrá que pedir el profesor.
00:16:09
Nib del profe.
00:16:12
Control C.
00:16:17
Vale.
00:16:18
Entonces, caso 6.
00:16:21
Necesitamos, antes que nada,
00:16:24
pedir el nib del profesor
00:16:26
del que quiere sacar el listado.
00:16:27
Y ahora,
00:16:33
nib del profesor.
00:16:35
Vale.
00:16:37
Y ahora,
00:16:39
vamos a
00:16:40
sacar la posición en la que está
00:16:43
este profe para luego llamar
00:16:46
a sort, vamos a sacar la posición
00:16:48
en que está este profe
00:16:50
la posición en la que está este profe es
00:16:52
tan fácil como
00:16:54
profes
00:16:55
profes está aquí en mi main
00:16:57
puedo llamarlo directamente
00:16:59
no está aquí profes en mi main
00:17:01
vale
00:17:03
pues profes está aquí
00:17:05
entonces
00:17:10
profes.index
00:17:12
index of new profesor de nif, este de aquí, nombre, me da lo mismo.
00:17:15
Entonces, este me da la posición del profe con ese nif.
00:17:30
Y ahora, el profe con esa posición, get posición, le llamo al método listado alfabético.
00:17:33
Y ahora a este le paso
00:17:48
Sí, lo acabo de llamar
00:17:51
Y ahora ya llamo al SISO de este de aquí
00:17:52
¿Qué método?
00:17:54
Bueno, no es que se pueda eliminar
00:18:05
Es que le metes este código dentro
00:18:06
Le metes esto dentro y ya está
00:18:08
Pero sí que tendrías que sacarlo del main
00:18:10
Idealmente
00:18:13
Vale, pues entonces le ponemos el SISO aquí
00:18:14
Venga
00:18:17
y voy a bajar
00:18:20
esto del system out
00:18:38
aquí abajo
00:18:38
vale
00:18:39
pues lo
00:18:42
que hemos hecho aquí
00:18:43
en este código
00:18:44
lo entendemos
00:18:45
¿no?
00:18:47
nos dan el nif
00:18:48
de un profesor
00:18:49
sacamos
00:18:50
el profesor
00:18:52
con ese nif
00:18:54
no estamos ni validando
00:18:55
que exista o no exista
00:18:57
para hacer como
00:18:58
lo sacamos
00:18:58
entonces primero
00:18:59
he sacado la posición
00:19:00
de ese profe
00:19:01
con el método indexof
00:19:02
que me saca la primera
00:19:06
posición que encuentra
00:19:07
con un profesor
00:19:10
igual a este, y como la igualdad es por
00:19:12
nif, es el nombre, le puedo poner null, me da igual
00:19:14
saco la posición y ahora
00:19:16
este es el profe, es el profe que estoy buscando
00:19:18
y ahora
00:19:20
a este profe
00:19:21
le llamo al método
00:19:24
le llamo al método que me devuelve
00:19:25
la lista de alumnos alfabéticamente ordenados
00:19:27
y ahora ya la estoy
00:19:30
pasando por consola para que la orden
00:19:31
para que la muestre, perdón
00:19:33
vale
00:19:35
vale, claro, eso es lo que quiero hacer
00:19:35
para ver el error que sale, vale
00:19:42
vale, entonces esto, hombre
00:19:44
para ser un poquito más
00:19:47
guays, pues esto será
00:19:49
si lo contiene, verdad
00:19:51
si
00:19:52
profes
00:19:54
contains
00:19:55
a este
00:19:59
vale, si lo contiene
00:20:02
si contiene a un profe igual a este
00:20:12
entonces sí, hacemos todo esto de aquí
00:20:14
si lo contiene
00:20:16
si no lo contiene, pues decimos
00:20:18
oye, es que no existe ese profe
00:20:20
¿verdad?
00:20:22
no existe profe con ese nif
00:20:31
vale, pues la parte del main sería esta
00:20:33
sacamos el profe con ese nif
00:20:40
si es que está
00:20:43
en la lista, a través del contains
00:20:44
está, lo saco
00:20:46
que no está, digo que no existe profe
00:20:48
ahora, efectivamente, cuando ejecutemos
00:20:50
esto
00:20:52
pues
00:20:53
cuando ejecutemos esto
00:20:55
insertamos profesor
00:21:03
1, 2, 3, 4
00:21:06
nombre del profesor
00:21:07
agregar nuevo alumno
00:21:10
1, 1, 1, 1
00:21:12
alum 1
00:21:13
y se lo agrego a este, ahora
00:21:15
2, vamos a agregarle otro, 2, 2, 2, 2
00:21:20
a alum, para que vaya
00:21:25
después, para que vaya antes, perdón
00:21:28
alum 2, vale
00:21:31
nombre del alumno, a quien a este, agregados
00:21:35
lista alfabético, 6
00:21:40
Ah, nif del profesor
00:21:42
Vale
00:21:46
Quiero el listado alfabético del profesor
00:21:46
Un, dos, tres y cuatro
00:21:49
Vale
00:21:51
¿No existe profe con ese nif?
00:21:51
Porque en profesor no hemos hecho el contains
00:21:55
El equals, ¿verdad?
00:21:58
¿Sí está hecho?
00:22:00
Claro
00:22:01
Entonces, ¿por qué no ha encontrado profe con ese nif?
00:22:02
Porque el contains
00:22:06
Tira del equals
00:22:08
¿Vale?
00:22:10
Entonces, como yo no tengo el equals
00:22:10
No he encontrado un profesor igual a este otro
00:22:13
Porque este tiene una dirección de memoria
00:22:16
Y estos tienen otras
00:22:17
Entonces, para que funcione tanto el context
00:22:19
Como el index of
00:22:22
El profesor tiene que tener su equals
00:22:23
Que no lo tiene
00:22:24
Pues vamos a ponérselo
00:22:26
Venga, un equals por nif
00:22:32
Vale, a ver si ya avanzamos
00:22:34
Hasta donde queremos
00:22:39
Ala, volvemos a ejecutar
00:22:40
Uno
00:22:43
Insertar profesor, 1, 2, 3, 4
00:22:45
Vamos a poner solo un alumno
00:22:47
Si total no lo va a ser capaz de ordenar, nos da igual
00:22:48
Nib del alumno, 1, 1, 1
00:22:50
Nombre del alumno
00:22:53
Alum, 1, 2, 3 y 4
00:22:54
6
00:22:57
Nib del profesor, 1, 2, 3 y 4
00:23:00
Vale
00:23:03
¿Por qué no ha saltado el error?
00:23:04
A ver que hemos hecho bien
00:23:12
Si la idea
00:23:15
Vamos a ver
00:23:17
GetPost, alumnos alfabéticamente ordenados.
00:23:19
Vale.
00:23:22
Entonces.
00:23:24
Ya, pero el sort tira del comparable.
00:23:33
Entonces, ¿por qué no me ha salido aquí un?
00:23:36
Un.
00:23:39
Comparar, ¿por qué no me ha salido?
00:23:43
Vale, pues repito rápidamente.
00:23:45
Cuando la lista tiene un solo elemento,
00:23:47
aunque no haya criterio de ordenación,
00:23:50
En tiempo de ejecución no va a fallar porque no intenta ordenar nada.
00:23:51
Cuando tiene más de uno, ya sí que intenta comparar uno con otro.
00:23:55
Entonces, ahí es cuando nos sale este error, ¿vale?
00:23:59
De compararle.
00:24:01
Vale.
00:24:03
Método 1 para hacer ese criterio de ordenación.
00:24:04
Método 1.
00:24:08
Pues hacer lo que nos dice.
00:24:10
¿Qué es?
00:24:12
Bueno, pues voy a hacer que mi clase alumno sea comparable con otros alumnos.
00:24:13
Para eso implemento el rol o la interfaz de comparable
00:24:17
Ahora, como ya sabemos tipos genéricos
00:24:29
Podemos hacer esto un poco más bonito y más pulido
00:24:33
Veis que se pone en amarillo
00:24:35
Y si veis el aviso en amarillo
00:24:37
Dice, cuidado que comparable es una clase genérica
00:24:39
Si tú me pones el comparable sin más
00:24:42
te estás permitiendo comparar alumnos
00:24:45
con cualquier otra cosa
00:24:48
comparar un chorizo con una morcilla
00:24:49
pues no queremos eso en una aplicación
00:24:52
¿vale? entonces
00:24:54
para poder asegurarnos de que los
00:24:56
alumnos solo se pueden comparar
00:24:58
con otros alumnos
00:25:00
vamos a concretar el tipo
00:25:01
genérico de comparable así
00:25:04
¿vale? entonces
00:25:06
repito, comparable
00:25:11
es genérica, una clase genérica ya sabéis
00:25:13
que no hay que especificar
00:25:15
exactamente esa incógnita genérica
00:25:17
para la que trabaja, pero si no se especifica
00:25:20
se supone que trabaja con object
00:25:23
luego, si yo no la especifico, yo podría
00:25:25
comparar, permitiría en tiempo de escritura de código
00:25:29
y el compilador no me diría nada, podría comparar
00:25:32
dentro del compare tú, alumnos
00:25:35
con árboles, y el compilador no me daría ningún problema
00:25:38
a lo mejor estoy haciendo eso porque quiero
00:25:42
o a lo mejor estoy haciendo porque me he equivocado, lo normal es porque me he equivocado
00:25:44
porque una aplicación no quiere comparar
00:25:47
alumnos con árboles, quiere comparar
00:25:48
alumnos con alumnos, profesores con profesores
00:25:51
mesas con mesas, pues vamos a
00:25:53
fijar ya desde el tiempo de escritura
00:25:55
de código, desde el tiempo de compilación, vamos a
00:25:57
fijar ya esa restricción
00:25:59
pues para eso fijamos
00:26:01
el tipo genérico de la interfaz
00:26:03
comparable, lo fijamos
00:26:05
¿vale? y decimos, no, no, no
00:26:07
perdona, cada objeto alumno
00:26:09
solo está permitido
00:26:11
ya desde tiempo de código que se compare con
00:26:13
alumnos
00:26:15
¿Vale? Si abrimos esta comparable
00:26:15
Pues
00:26:19
Si se abriera
00:26:20
Alguna vez
00:26:25
Pues
00:26:26
Bueno, tendría que haberle
00:26:28
Comparable
00:26:31
¿Veis?
00:26:36
Vemos que efectivamente es genérica
00:26:38
Depende del tipo T
00:26:40
Yo lo puedo dejar abierto
00:26:42
Con lo cual sería object o la puedo concretar
00:26:44
Pues me interesa concretarla
00:26:46
Para hacer un código
00:26:48
más robusto, ahora ya
00:26:49
el alumno solo
00:26:51
se va a poder comparar con alumnos
00:26:53
bueno, pues como implementa comparable
00:26:55
ya sabemos que hay que implementar el método
00:26:57
de la interfaz
00:26:59
¿y ese método cuál es?
00:27:00
este
00:27:05
el compare tú
00:27:05
¿veis?
00:27:07
y el compare tú, que es el
00:27:10
método que obligatoriamente tengo que
00:27:11
implementar en alumnos
00:27:13
se implementa comparable
00:27:15
que es este, como veis
00:27:17
ya asume que yo solo puedo
00:27:19
pasar aquí un alumno, solo
00:27:21
si yo el comparar lo hubiera dejado abierto
00:27:22
este compare tú
00:27:25
sería con object
00:27:27
con lo cual yo aquí podría hacer lo que me da la gana
00:27:28
porque no es
00:27:31
obligatorio comparar con un alumno
00:27:33
a lo mejor quiero eso en algún momento
00:27:35
pero eso no responde a una lógica natural
00:27:36
¿vale? entonces me interesa
00:27:39
más concretar
00:27:41
bueno pues ahora ya
00:27:42
¿qué orden quiero yo entre alumnos?
00:27:43
el alfabético, el alfabético va por nombre
00:27:46
ya sabemos que el compare tú
00:27:49
lo que sí que le pasa
00:27:51
es que su criterio es
00:27:52
tiene que devolver negativo
00:27:55
normalmente ponemos menos uno
00:27:57
si el que llama el método
00:27:59
va antes que el parámetro
00:28:01
cero
00:28:03
si es la misma posición de orden
00:28:05
y positivo si el que
00:28:07
llama el método quiero que vaya
00:28:09
después del parámetro
00:28:11
si yo estuviera ordenando por edades
00:28:12
pues sería tan fácil como
00:28:15
devolver la edad del primero menos la edad del segundo
00:28:16
si yo estuviera comparando
00:28:19
por edades
00:28:21
es decir, si mi clase alumno
00:28:21
o por notas, los quiero ordenar por notas
00:28:24
los quiero ordenar por notas
00:28:27
pues podría hacer
00:28:29
esto
00:28:31
retun
00:28:31
dis.nota
00:28:33
menor que o.nota
00:28:36
y así
00:28:39
si el
00:28:41
si el primero
00:28:43
tiene menos nota que el segundo
00:28:45
esto me da negativo
00:28:47
luego efectivamente
00:28:49
el primero iría antes, porque esto me da
00:28:51
negativo, si los quiero ordenar por orden ascendente
00:28:53
claro, por orden ascendente de nota
00:28:55
si los dos tienen la misma nota, esto me daría cero
00:28:56
lo cual significaría misma posición
00:28:59
si el primero tiene más
00:29:00
nota, esto sería positivo
00:29:03
que efectivamente significa
00:29:05
que el primero va después
00:29:07
¿vale? este sería
00:29:08
por ejemplo, el orden
00:29:11
Ascendente de nota
00:29:13
¿Vale?
00:29:16
Que mi criterio de ordenación es
00:29:20
Orden descendente de nota
00:29:22
Pues lo contrario
00:29:24
Pues sería lo contrario
00:29:26
Vale, pero yo no quiero ese orden
00:29:32
Quiero el orden por nombre
00:29:44
Vale, los nombres son string
00:29:46
Ordenar alfabéticamente string
00:29:50
No es trivial, no lo hemos hecho
00:29:52
Menos mal
00:29:54
Que la clase string, por ser una clase
00:29:55
Tiene un montón de métodos ya hechos
00:29:58
entre ellos la clase string tiene un método compare tú
00:29:59
que te compara alfabéticamente un string con el que tú le pases
00:30:02
qué suerte que lo tiene
00:30:06
porque ahora yo lo puedo usar aquí
00:30:08
y si yo pongo dis.nombre
00:30:11
este método tiene un compare tú
00:30:16
que si yo le paso otro string
00:30:19
que en este caso sería o.nombre
00:30:22
pues el método compare tú de la clase string
00:30:25
ya se encarga de devolverme
00:30:30
menos 1 si este está alfabéticamente
00:30:33
antes que este
00:30:35
0 si alfabéticamente son idénticos
00:30:37
y más 1 si este está alfabéticamente después de este
00:30:40
o sea, el compareTo de string
00:30:44
ya me devuelve menos 1, 0, más 1
00:30:46
en función del criterio de orden alfabético
00:30:49
luego el orden alfabético ya está programado aquí
00:30:50
en la clase compareTo de string
00:30:53
pues yo tiro del método compareTo
00:30:56
para hacer mi propio compare tú de alumno.
00:30:58
Y ya está.
00:31:02
Le paso hasta el retún.
00:31:03
Y listo.
00:31:05
Luego ya tengo mi compare tú de alumno.
00:31:09
Que se apoya en el compare tú de la clase string.
00:31:15
Y así haría yo el criterio que me diera a mí la gana
00:31:24
programándolo como quisiera.
00:31:26
Pero eso te lo...
00:31:30
Te ha tomado un orden...
00:31:31
Alfabético.
00:31:33
El compare tú de string está pensado para el orden alfabético
00:31:35
según la tabla ASTI
00:31:38
pues
00:31:38
multiplicas por menos uno
00:31:41
ya está
00:31:46
entonces en orden alfabético inverso
00:31:47
multiplicas por menos uno
00:31:51
pues ahora ya sí que no nos va a dar
00:31:52
ese error
00:32:13
para cualquier situación
00:32:13
no, no, no
00:32:16
No, no, no
00:32:21
Porque el criterio
00:32:24
Yo ahí dejo mi null sin problema
00:32:25
Este null, ese es el plan B
00:32:26
Si yo no tengo el comparable
00:32:29
Entonces ya sí que lo tengo que meter ahí
00:32:30
Pero es el plan B
00:32:32
Si yo ya en comparable tengo el criterio
00:32:33
En ese sort puede ir un null
00:32:36
Porque ya no lo necesita
00:32:38
Null porque vacío no me lo admite
00:32:39
El sort necesita siempre algo
00:32:43
Si tú no quieres darle nada
00:32:46
Un null, que un null es un objeto válido
00:32:47
¿Vale?
00:32:49
Entonces, el método estaba aquí, ¿no?
00:32:51
¿Vale?
00:32:56
El método sort no admite ir sin parámetros.
00:32:57
Pero yo el objeto que necesita no lo va a usar porque ya tiene el del comparable.
00:33:00
Pues le paso el objeto null.
00:33:05
Entonces, ahora debería funcionar.
00:33:09
Insertar profe.
00:33:14
Un, dos, tres y cuatro.
00:33:15
Nombre del profesor.
00:33:16
Agregar alumno.
00:33:19
Vamos a agregar primero al alumno Zazo.
00:33:20
Ah, no, el NIF, 1, 1, 1, 1, y se llama Zazo, a 1, 2, 3, 4.
00:33:23
Y ahora le agregamos otro, desordenado alfabéticamente, Aka.
00:33:31
No, el NIF es 2, 2, 2, 2, y se llama Aka.
00:33:38
NIF del profesor, 1, 2, 3 y 4.
00:33:43
Vale, vamos a mostrar los alumnos alfabéticamente ordenados
00:33:46
¿De quién? De 1, de 2, de 3 y de 4
00:33:52
Vale, aquí los tenemos
00:33:56
Ordenados alfabéticamente
00:33:58
Primero el AK, aunque yo le puse después
00:34:01
Yo le puse después, pero al ordenar la lista
00:34:05
Pues ahí se ha quedado
00:34:08
Ahí está ordenadito
00:34:10
Bueno, pues paramos unos minutos
00:34:18
Y luego el plan B, para ordenar
00:34:27
Cuando yo no puedo hacer el comparable
00:34:29
¿Qué puede ocurrir?
00:34:31
Venga, paramos unos minutos
00:34:33
- 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:
- 10 de febrero de 2026 - 13:52
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 34′ 35″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 147.46 MBytes