in core/src/main/java/gnu/trove/TLongObjectHashMap.java [298:322]
private int index(long val) {
long[] set = _set;
Object[] values = _values;
if (values == EMPTY_OBJECT_ARRAY) return -1;
int length = set.length;
int hash = _hashingStrategy.computeHashCode(val) & 0x7fffffff;
int index = hash % length;
if (!isFree(values, index) &&
(isRemoved(values, index) || set[index] != val)) {
// see Knuth, p. 529
int probe = 1 + (hash % (length - 2));
do {
index -= probe;
if (index < 0) {
index += length;
}
}
while (!isFree(values, index) &&
(isRemoved(values, index) || set[index] != val));
}
return isFree(values, index) ? -1 : index;
}