int (final int k) { if (k == 0) { return containsNullKey ? values[keys.length] : -1; } int curr; int index; // the starting point if ((curr = keys[index = 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]; } } }