![](/img/trans.png)
[英]Java/Kotlin - convert Set to Map<Long, Set<Long>>
[英]Kotlin Convert long String letters to a numerical id
我试图找到一种方法将像“T2hR8VAR4tNULoglmIbpAbyvdRi1y02rBX”这样的长字符串 ID 转换为数字 ID。
我想过获取每个数字的 ASCII 值,然后将它们相加,但我认为这不是一个好方法,因为不同的数字可能具有相同的结果,例如,“ABC”和“BAC”将具有相同的结果结果
A = 10,B = 20,C = 50,
ABC = 10 + 20 + 50 = 80
BAC = 20 + 10 + 50 = 80
我还想过获取每个字母的 ASCII 代码,然后将数字设置为彼此相邻,例如“ABC”
所以 ABC = 102050
这种方法不起作用,因为有一个 20 个字母的字符串会导致一个巨大的数字,那么我该如何解决这个问题呢? 先感谢您。
您可以使用hashCode()
函数。 "id".hashcode()
。 所有对象都实现了这个函数的一个变体。
从文档:
open fun hashCode(): Int
返回对象的哈希码值。
hashCode
的总合约为:每当在同一个对象上多次调用它时,
hashCode
方法必须始终返回相同的整数,前提是对象上的equals
比较中使用的信息没有被修改。如果根据
equals()
方法两个对象相等,则对两个对象中的每一个调用hashCode
方法必须产生相同的整数结果。
所有平台对象都默认实现它。 如果您有很多 ID,则总是有可能出现重复项。
如果您使用基于 JVM 的 kotlin 环境,则哈希将由 JVM 的String.hashCode()
函数生成。
如果您需要 100% 确信没有可能的重复项,并且输入字符串最长可达 20 个字符,那么您不能将 ID 存储在 64 位 Long 中。 您将不得不使用 BigInteger:
val id = BigInteger(stringId.toByteArray())
那时,我质疑将 ID 转换为数字格式是否有任何意义。 字符串本身可以是 ID。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.