Mutating a key's hash-relevant field after insertion: the entry is still THERE, just unfindable =============================================================================================== map.put(key(tag=42), ...) then key.setTag(99) containsKey(new MutableKey(42)) before mutation : true containsKey(new MutableKey(42)) after mutation : false (looks for old hash's bucket - key no longer hashes there) containsKey(new MutableKey(99)) after mutation : false (looks in the NEW hash's bucket - key was never filed there either) map.size() is still : 1 (the entry was never removed!) the mutated key object IS still found by direct iteration over keySet(): true