public long get(long k) {
    if (k == 0) {
      return containsNullKey ? values[keys.length] : -1;
    }

    long curr;
    int index;
    // the starting point
    if ((curr = keys[index = (int)k & mask]) == 0) {
      return -1;
    }

    if (k == curr) {
      return values[index];
    }
    // there's always an unused entry
    while (true) {
      if ((curr = keys[index = index + 1 & mask]) == 0) {
        return -1;
      }
      if (k == curr) {
        return values[index];
      }
    }
  }
public long get(long k)