是这样的,我正在使用一个第三方的 ORM 框架,它的实体只支持以Long为主键,而我的业务逻辑大部分则需要以String为主键。我想到的一个方案是写一个映射函数来将业务主键的String映射成Long来提供给框架使用。直接使用String的hashCode()方法似乎比较简单,但是感觉碰撞的概率应该很大。有没有其它好的实现方式呢?
1
ninion 2019 年 10 月 25 日 CRC64 ?
|
2
jamesxu 2019 年 10 月 25 日 via iPhone
再加个字段
|
3
MrZhaoyx 2019 年 10 月 25 日 |
4
p2pCoder 2019 年 10 月 25 日 MurmurHash
|
6
YUyu101 2019 年 10 月 26 日
想不碰撞就不能压缩,那你的 string 长度不能太长,不然不可能不碰撞吧。
或者你 hash 再加个时间戳,一次性映射并存储,以后直接读 long,不要再转换了。 |
7
msg7086 2019 年 10 月 26 日
不碰撞就只能完全映射,string 到 long 要不碰撞的话只能 8 字节以内,否则必然总有一天会碰。
|
8
love 2019 年 10 月 26 日 via Android
如果字符串只存明文的话可以保存长很多
|
10
mutalisk 2019 年 10 月 27 日
cityhash
|
11
mutalisk 2019 年 10 月 27 日
楼上老哥说的 murmurhash 也可以
|