V (K key) { Entry<K, V>[] entries = this.entries; int hash = hashKey(key); int index = hash & mask; Entry<K, V> e = entries[index]; if (e == null) { return null; } K entryKey; if (e.keyHash == hash && ((entryKey = e.key) == key || hashingStrategy.isEqual(entryKey, key))) { entries[index] = e.hashNext; } else { for (; ; ) { Entry<K, V> last = e; e = e.hashNext; if (e == null) { return null; } if (e.keyHash == hash && ((entryKey = e.key) == key || hashingStrategy.isEqual(entryKey, key))) { last.hashNext = e.hashNext; break; } } } unlink(e); size--; return e.value; }