小编在工作中遇到了标题中的场景,先查了一些微博,参考下大佬经验。最终发现大家写的都是一套代码,没有太多的信息量做对比,并且UUID的hashcode值重复的概率有多大问题,没有人给解释。小编根据自己经验,结合业务实际,对16编码总结了下,希望对你会有帮助。
网络上的写法:
public static void get16UUID(){
// 1.最大支持1-9个集群机器部署
int machineId = 1;
// 2.生成uuid的hashCode值
int hashCodeV = UUID.randomUUID().toString().hashCode();
// 3.有可能是负数
if(hashCodeV < 0) {
hashCodeV = - hashCodeV;
}
// 4.结果
String value = machineId + String.format("%015d", hashCodeV);
System.out.println(value);
}
}
以上代码的缺点:
通过我的研究和实践,发现UIID的hashcode值可能为9位或10位,但不超过10位。所以,String.format("%015d", hashCode)算法会在hashcode值前补至少5个无意义的0,属于占着茅坑不拉屎的角色,实在是对仅有的16位编码的位置浪费。小编的做法,是补全至10位,将前6位充分利用,不仅要达到进一步降低重复概率的目的