¿Cómo eliminar objetos duplicados definidos por el usuario de LinkedHashSet en Java?

Al crear un HashSet de su propia clase, siempre asegúrese de que el método HashCode() de la clave de HashSet no cambie. Java Object hashCode() es un método nativo y devuelve el valor del código hash entero del objeto. Si dos objetos son iguales según el método equals(), entonces su código hash debe ser el mismo. Si dos objetos no son iguales según el método equals(), no es necesario que sus códigos hash sean diferentes.

Sintaxis:

igual() Método:

public boolean equals  (Object obj)

// This method checks if some other Object
// passed to it as an argument is equal to 
// the Object on which it is invoked.

Método HashCode():

public int hashCode()

// This method returns the hash code value 
// for the object on which this method is invoked.

Cada vez que se invoque (hashcode) en el mismo objeto más de una vez durante la ejecución de una aplicación Java, el método hashCode debe devolver el mismo entero de manera consistente, siempre que no se modifique la información utilizada en las comparaciones de igualdad en el objeto.

Si dos objetos son iguales según el método equals(Object) , entonces llamar al método hashCode() en cada uno de los dos objetos debe producir el mismo resultado entero.

A continuación se muestra la implementación del enunciado del problema anterior:

Java

// Java Program  to eliminate duplicate user 
// defined Objects from LinkedHashSet
import java.util.*;
// Java program to illustrate
// overriding of equals and
// hashcode methods
class student {
    int marks;
    String name;
    // Constructor
    public student(String name, int marks)
    {
        this.marks = marks;
        this.name = name;
    }
    // Getters and Setters
    public int getMarks() { return marks; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public void setMarks(int marks) { this.marks = marks; }
    @Override public int hashCode()
    {
        final int prime = 31;
        int result = 1;
        result = prime * result + marks;
        result = prime * result
                 + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    @Override
    // if both the object references are
    // referring to the same object.
    public boolean equals(Object obj)
    {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
  
        // type casting of the argument.
        student other = (student)obj;
  
        // comparing the state of argument with
        // the state of 'this' Object
        if (marks != other.marks)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        }
        else if (!name.equals(other.name))
            return false;
        return true;
    }
}
  
public class GFG {
  
    public static void main(String[] args)
    {
        // HashSet initialization
        HashSet<student> set = new HashSet<>();
  
        // Add entries in HashSet
        set.add(new student("sam", 452));
        set.add(new student("cam", 451));
        set.add(new student("sam", 452));
        set.add(new student("cam", 451));
        for (student std : set) {
            System.out.println(std.name + " " + std.marks);
        }
    }
}
Producción

cam 451
sam 452

Publicación traducida automáticamente

Artículo escrito por rohit2sahu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *