How should I implement hashCode()
and equals()
for the following class in Java?
class Emp { int empid ; // unique across all the departments String name; String dept_name ; String code ; // unique for the department }
In HashMap, hashCode() is used to calculate the bucket and therefore calculate the index. equals() method: This method is used to check whether 2 objects are equal or not. This method is provided by the Object class. You can override this in your class to provide your implementation.
internal consistency: the value of hashCode() may only change if a property that is in equals() changes. equals consistency: objects that are equal to each other must return the same hashCode. collisions: unequal objects may have the same hashCode.
in Eclipse right mouse click-> source -> generate hashCode() and equals() gives this:
/* (non-Javadoc) * @see java.lang.Object#hashCode() */ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + (code == null ? 0 : code.hashCode()); return result; } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (!(obj instanceof Emp)) return false; Emp other = (Emp) obj; return code == null ? other.code == null : code.equals(other.code); }
I've selected code as a unique field
try this code, use org.apache.commons.lang3.builder
public int hashCode() { return new HashCodeBuilder(17, 31). // two randomly chosen prime numbers append(empid). append(name). append(dept_name ). append(code ). toHashCode(); } public boolean equals(Object obj) { if (obj == this) return true; if (!(obj instanceof Person)) return false; Emp rhs = (Emp) obj; return new EqualsBuilder(). // if deriving: appendSuper(super.equals(obj)). append(name, rhs.name). isEquals(); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With