Overriding the hashCode() method is closely related to overriding equals(): both methods form the basis for the correct use of an object in collections such as HashMap, HashSet, Hashtable, and other structures that rely on comparison and hash functions.
Rules:
equals(), you must also override hashCode().equals() must return the same hashCode().Objects.hash() or IDE templates, to avoid mistakes.hashCode() should return the same value for the same object throughout its "lifetime" (if the fields involved in hashCode are immutable).class User { private String name; public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof User)) return false; User user = (User) o; return Objects.equals(name, user.name); } public int hashCode() { return Objects.hash(name); } }
Question: "What happens if two different objects according to equals() return the same hashCode()? Will this be an error?"
Answer: No, this is not an error. Hash code collisions are resolvable and expected — it is important that if objects are equal according to equals, their hashCode is the same. If different objects according to equals produce the same hashCode, collections will work slower (due to a higher number of collisions), but correctly.
Story
In financial software, projects were compared based on several fields, but only equals() was overridden. Objects were stored in HashSet, duplicates appeared because hashCode() was not overridden and worked by default (differed for each instance).
Story
In a warehouse accounting system, after adding changes to the business logic, equals() was extended but hashCode() was forgotten to be updated. Objects with different hashCode but equals=true were lost in HashMap (could not be found by key), leading to significant financial errors.
Story
In a web application, mutable fields were used in the calculation of hashCode. When the value of an internal field was updated, the hash changed, and the object was "lost" for HashSet/HashMap: it could not be found or removed through standard methods, leading to memory leaks and bugs.