If you just hash integers, here is one way.
public class Hasho {
private static final Long LARGE_PRIME = 948701839L;
private static final Long LARGE_PRIME2 = 6920451961L;
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(i + " -> " + hash(i));
}
}
public static int hash(int i) {
long scaled = (long) i * LARGE_PRIME;
long shifted = scaled + LARGE_PRIME2;
long filled = shifted + ((shifted & 0xFFFFFFFF00000000L) >> 32);
int masked = (int) (filled & 0x7FFFFFFF);
return masked;
}
}
, , . - .