Hash算法
发布于 May 06, 2020 by ThinkCat.
散列函数是将字符串或者数字作为输入,通过计算输出一个整数,理想的散列函数输出非常均匀分布在可能的输出域,特别是当输入非常相似的时候。
最近准备对线上的数据库进行分表的操作,整理方案的时候,看到最常用的还是采用对特定业务标识做 hash+mod
的方式。
于是也打算做这个方案,首要的是hash算法问题。有各种的实现,发现神器 guava 里面有一个 Hashing
类,包含 sha256, crc32, murmur3 等各种校验与hash实现。
测试下来,发现 murmur3 的版本中,会存在hash值是负数的情况,这种就取绝对值了。
public static void main(String[] args) { HashFunction hashFunction = Hashing.murmur3_128(); long a = System.currentTimeMillis(); int count = 0; for (int i = 0;i< 1000000;i++) { HashCode hashCode = hashFunction.hashInt(i); if (hashCode.asInt() < 0) { System.out.println("Found:" + i); count++; } } System.out.println("all:" + count); System.out.println(System.currentTimeMillis() - a); }
散列函数介绍:
https://zh.wikipedia.org/wiki/%E6%95%A3%E5%88%97%E5%87%BD%E6%95%B8