code: @Override
    int findKey(final byte[] key) {
      final long[] hash = MurmurHash3.hash(key, SEED);
      int entryIndex = getIndex(hash[0], tableEntries_);
      int firstDeletedIndex = -1;
      final int loopIndex = entryIndex;
      do {
        if (curCountsArr_[entryIndex] == 0) {
          return firstDeletedIndex == -1 ? ~entryIndex : ~firstDeletedIndex; // found empty or deleted
        }
        if (curCountsArr_[entryIndex] == DELETED_KEY_MARKER) {
          if (firstDeletedIndex == -1) {
            firstDeletedIndex = entryIndex;
          }
        } else if (Map.arraysEqual(keysArr_, entryIndex * keySizeBytes_, key, 0, keySizeBytes_)) {
          return entryIndex; // found key
        }
        entryIndex = (entryIndex + getStride(hash[1], tableEntries_)) % tableEntries_;
      } while (entryIndex != loopIndex);
      throw new SketchesArgumentException("Key not found and no empty slots!");
    }
docs: Returns entryIndex if the given key is found. If not found, returns one's complement index
  of an empty slot for insertion, which may be over a deleted key.
  @param key the given key
  @return the entryIndex