![](/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.