Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

Orden de los elementos de la lista curso1 cambia si modifico el Overide de hashCode en Alumno Clase16

Hola amigo de Alura,

Estoy escribiendo porque me llama la atencion que si en la clase Alumno tengo esto:

    @Override
    public int hashCode() {
        // TODO Auto-generated method stub
        return this.codigo.hashCode();
    }

Me regresa la lista de acuerdo al orden en que se agregaron los alumnos:

Luis Miguel Pepito los palotes Juan Carlos Pedro Pedrito Gustavo Sanchez Marcia Maria Claudia Patricia

Pero si cambio ese metodo de la siguiente forma:

    @Override
    public int hashCode() {
        // TODO Auto-generated method stub
        return this.nombre.hashCode();
    }

La lista no tiene el orden en que se adicionaron los alumnos:

Juan Carlos Claudia Patricia Pedro Pedrito Gustavo Sanchez Pepito los palotes Marcia Maria Luis Miguel

Alguien sabria explicarme porque sucede esto? Porque ese cambio en el metodo hace que pase el objeto de regresar los elementos como lo haria en una lista o ArrayList a hacerlo como si fuera un HashSet?

Saludos

2 respuestas

Hola Javier, espero que estés bien! Gracias por compartir tu código con nosotros. Si tiene alguna pregunta sobre el contenido del curso, estamos aquí para ayudarlo. ¡Sigue practicando! ¡Vamos juntos! :)

Si este post te ayudó, por favor, marca como solucionado ✓.

Hola Javier, espero que estés muy bien.

La devolución de nombres en su ejemplo sucedió de manera diferente, porque el retorno del método hashCode() que tienen las Colecciones se debe a la Estructura de Datos implementada.

Cuando sobrescribe el método de la Class String, está indicando que ahora, al llamar a este método, el retorno será el código hash de la variable deseada, pero la orden de devolución de este número puede cambiar según la estructura de su código.

Para que quede más claro:

  • HashSet no tiene un orden predecible. Imagina una bolsa de bingo. En su interior añadimos varias bolas numeradas que no se repiten, se utiliza cuando no es importante el orden sino un gran rendimiento y velocidad;

  • LinkedHashSet es una versión ordenada de HashSet que mantiene una lista doblemente enlazada en todos los elementos. Use esta clase en lugar de HashSet cuando le importe el orden de iteración.

  • ArrayList es una implementación de la interfaz List, en este caso a diferencia de las implementaciones de la interfaz Set, la ArrayList permite repeticiones. En él se respeta el orden de las inserciones porque es secuencial.

¡Intenta modificar tu código y observa el comportamiento de cada uno para practicar!

Espero haberte quedado claro, cualquier duda estaremos aquí para ayudarte =)

¡Saludo!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios