public boolean remove(int key,
                        int value) {
    checkNotNoValue("key", key);
    checkNotNoValue("value", value);
    int capacity = capacity();
    int startIndex = Math.abs(key % capacity);
    for (int probe = 0; probe < capacity; probe++) {
      int slotIndex = (startIndex + probe) % capacity;
      int slotKey = table[slotIndex * 2];
      int slotValue = table[slotIndex * 2 + 1];
      if (slotKey == key && slotValue == value) {
        //reset key, but leave value as-is: this is the marker of 'removed' slot
        table[slotIndex * 2] = NO_VALUE;

        aliveValues--;
        rehashIfNeeded();

        //No need to look farther, since only one (key,value) record could be in the map
        return true;
      }
      if (slotKey == NO_VALUE && slotValue == NO_VALUE) {
        //free slot -> end of probing sequence, no (key, value) found -> nothing to remove:
        return false;
      }
    }
    return false;
  }
public boolean remove(int key,
                        int value)