Because Object
implements hashCode
, any Java class can be put into a hash structure. However, classes that define
equals(Object)
but not hashCode()
aren’t truly hash-able because instances that are equivalent according to the
equals
method can return different hashes.
Noncompliant code example
public class Student { // no hashCode() method; not hash-able
// ...
public boolean equals(Object o) {
// ...
}
}
public class School {
private Map<Student, Integer> studentBody = // okay so far
new HashTable<Student, Integer>(); // Noncompliant
// ...
Compliant solution
public class Student { // has hashCode() method; hash-able
// ...
public boolean equals(Object o) {
// ...
}
public int hashCode() {
// ...
}
}
public class School {
private Map<Student, Integer> studentBody = new HashTable<Student, Integer>();
// ...