xxHash是一个非常快的哈希算法,能在限制速度的RAM上运行。 它成功完成了SMHasher测试套件,它可以评估散列函数的冲突,色散和随机性。 代码非常便于携带,所有平台上的散列都相同(小/大)。测试对比参考:https://blog.csdn.net/tianshan2010/article/details/115775292
public class XXHash {private static final int PRIME1 = (int) 2654435761L;private static final int PRIME2 = (int) 2246822519L;private static final int PRIME3 = (int) 3266489917L;private static final int PRIME4 = 668265263;private static final int PRIME5 = 0x165667b1;public static int digestSmall(byte[] data, int seed, boolean bigendian) {final EndianReader er = bigendian ? EncodeUtils.BEReader : EncodeUtils.LEReader;final int len = data.length;final int bEnd = len;final int limit = bEnd - 4;int idx = seed + PRIME1;int crc = PRIME5;int i = 0;while (i < limit) {crc += er.toInt(data, i) + (idx++);crc += Integer.rotateLeft(crc, 17) * PRIME4;crc *= PRIME1;i += 4;}while (i < bEnd) {crc += (data[i] & 0xFF) + (idx++);crc *= PRIME1;i++;}crc += len;crc ^= crc >>> 15;crc *= PRIME2;crc ^= crc >>> 13;crc *= PRIME3;crc ^= crc >>> 16;return crc;}public static int digestFast32(byte[] data, int seed, boolean bigendian) {final int len = data.length;if (len < 16) {return digestSmall(data, seed, bigendian);}final EndianReader er = bigendian ? EncodeUtils.BEReader : EncodeUtils.LEReader;final int bEnd = len;final int limit = bEnd - 16;int v1 = seed + PRIME1;int v2 &