我要将最大长度为15的字符串转换为唯一的长数字。我尝试使用biginteger的longvalue()函数来实现相同的功能。
BigInteger bigInt = new BigInteger("abcdeabcdeabcda".getBytes());
long n = bigInt.longValue();
我们能避免长值的冲突直到字符串的15个字符吗?
字符串可以包含字母数字,包括特殊字符。
不要把字符串加密到很长。但是要提高配置单元查询计数(distinct)的性能。
我们注意到,如果使用long而不是string,则配置单元中的count(distinct)提供了良好的性能。
我们不想区分大概或概率计数。我们要确切的数字。
提前谢谢
1条答案
按热度按时间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。