@Override
  public V apply(long k) {
    if (k == 0) {
      return containsNullKey ? values[tableSize] : null;
    }

    long curr;
    final long[] key = this.keys;
    int pos;
    // The starting point.
    if ((curr = key[pos = (int)k & mask]) == 0) {
      return null;
    }
    if (k == curr) {
      return values[pos];
    }
    // There's always an unused entry.
    while (true) {
      if ((curr = key[pos = pos + 1 & mask]) == 0) {
        return null;
      }
      if (k == curr) {
        return values[pos];
      }
    }
  }
@Override
  public V apply(long k)