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:
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.
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); } } }
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