public V remove(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;
  }
public V remove(final long key)