V (final long key) { final Entry<V>[] table = this.table; final int hash = hashCode(key); final int index = hash % table.length; Entry<V> e = table[index]; if (e == null) { return null; } if (e.keyHash == hash && (e.key == key)) { table[index] = e.hashNext; } else { while (true) { final Entry<V> last = e; e = e.hashNext; if (e == null) { return null; } if (e.keyHash == hash && (e.key == key)) { last.hashNext = e.hashNext; break; } } } unlink(e); size--; return e.value; }