将15个字符长度的字符串转换为唯一的长数字-使用BigInteger longValue()



我想将最大长度为15的字符串转换为唯一的长数字。我试图使用BigInteger的longValue()函数。

BigInteger bigInt = new BigInteger("abcdeabcdeabcda".getBytes());
long n = bigInt.longValue();
  1. 我们可以避免冲突的长值,直到15个字符的字符串?
  2. 字符串可以包含字母、数字和特殊字符。
  3. 不把字符串加密到太长。但是为了提高hive查询计数的性能。
  4. 我们注意到,如果使用long代替string, hive中的count(distinct)提供了良好的性能。
  5. 我们不需要近似。或者概率计数不同。我们需要精确的计数。

Thanks in Advance

不行,至少不会发生碰撞。

ASCII是每个字符7位和15 * 7 = 105位-你不能把它放入一个长。

你建议你可能不需要完整的ASCII -也许是基数64,这是6位,但15 * 6 = 90,仍然太长了。

即使大小写无关,你可以不使用四个字母,使用32进制,你仍然有15 * 5 = 75,这对于64位数字来说仍然太错误了。

你需要接受会有碰撞,但也许有办法减少它们。如何生成这些15个字符的字符串?有什么模式可以借鉴吗?

@Athanor指出的问题的选择答案有一个好主意-使用两个长。2 * 64 = 128。使用7位ASCII的潜在105位数字可以很好地适合两个长字符。

相关内容

  • 没有找到相关文章

最新更新