Why do I need to override the equals and hashCode methods in Java? I mean Why always override hashcode() if overriding equals()?