The tricky thing is how to decide the key for a hashmap. Especially when you intend to use self-defined objects as key.
The simple rule is you have to overwrite hashcode() and equals() method.
Rule 1: x.equals(y) return true if x indeed is equal to y by your own logic;
Rule 2: if x.equals(y) then x.hashcode() == y.hashcode().
Ideally any two different objects have distinct hashcodes. But that‘t not possible since hashcode is used to generate real array index. Collisison has to happen. Thus in practice it‘s possible for two different objects to have same hashcode. Then equals() is used to tell one from the other.