使用biginteger longvalue()将15个字符长的字符串转换为唯一的长数字

svujldwt  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(440)

我要将最大长度为15的字符串转换为唯一的长数字。我尝试使用biginteger的longvalue()函数来实现相同的功能。

BigInteger bigInt = new BigInteger("abcdeabcdeabcda".getBytes());
long n = bigInt.longValue();

我们能避免长值的冲突直到字符串的15个字符吗?
字符串可以包含字母数字,包括特殊字符。
不要把字符串加密到很长。但是要提高配置单元查询计数(distinct)的性能。
我们注意到,如果使用long而不是string,则配置单元中的count(distinct)提供了良好的性能。
我们不想区分大概或概率计数。我们要确切的数字。
提前谢谢

rkkpypqq

rkkpypqq1#

不,你不能-至少不能没有碰撞。
ascii是每个字符7位,并且 15 * 7 = 105 位-你不能把它放进一个长的。
您建议您可能不需要完整的ascii-可能是6位的base 64,但是 15 * 6 = 90 ,还是太长了。
即使大小写无关紧要,你也可以不用四个字母字符,使用32进制你仍然可以 15 * 5 = 75 对于一个64位的数字来说这仍然是个错误。
你需要接受会有碰撞,但也许有办法减少它们。如何生成这15个字符串?有什么模式可以利用吗?
这个问题的精选答案@athanor指出有一个好主意-使用两个长。 2 * 64 = 128 . 你潜在的 105 使用7位ascii的位号可以很好地适应两个long。

相关问题