use bitwise XOR instead of plus operator to combine the hashcode of the key and value, which intertwines them and prevents collisions on hashmaps with values swapped between keys,
cache the hash code internally, to avoid unnecessary recalculations.
I've also added a test that verifies the hashcode doesn't take the order in which the kv-pairs are supplied into account.
There are two important changes:
I've also added a test that verifies the hashcode doesn't take the order in which the kv-pairs are supplied into account.