/**
  * Deletes a key/value pair from the map.
  *
  * @param key an <code>long</code> value
  * @return an <code>Object</code> value or (long)0 if no such mapping exists.
  */
 public V remove(long key) {
   V prev = null;
   int index = index(key);
   if (index >= 0) {
     prev = _values[index];
     removeAt(index); // clear key,state; adjust size
   }
   return prev;
 }
  /**
   * Retains only those entries in the map for which the procedure returns a true value.
   *
   * @param procedure determines which entries to keep
   * @return true if the map was modified.
   */
  public boolean retainEntries(TLongObjectProcedure<V> procedure) {
    boolean modified = false;
    byte[] states = _states;
    long[] keys = _set;
    V[] values = _values;

    // Temporarily disable compaction. This is a fix for bug #1738760
    tempDisableAutoCompaction();
    try {
      for (int i = keys.length; i-- > 0; ) {
        if (states[i] == FULL && !procedure.execute(keys[i], values[i])) {
          removeAt(i);
          modified = true;
        }
      }
    } finally {
      reenableAutoCompaction(true);
    }

    return modified;
  }