基于对象值的一致的、唯一的值
Posted
技术标签:
【中文标题】基于对象值的一致的、唯一的值【英文标题】:Consistent, Unique Value based on Object-Values 【发布时间】:2021-11-13 23:41:50 【问题描述】:我有一个对象,它需要一个唯一值来标识自己。如果 Object-Content 相同,则此唯一值必须始终相同,因此无法在创建时生成 UUID 或 GUID。
我考虑过根据 Object 的成员对 Object 进行哈希处理,并找到了一些关于如何编写哈希方法的想法,但我如何保证我自己的 HashCode-Function 不会偶然与另一个 Object 发生冲突?
【问题讨论】:
散列它的点以形成或多或少相似的对象组,以实现对大数据的更快查询。为每个项目计算不同的哈希是毫无意义的。 【参考方案1】:哈希码不打算是唯一的——这不是它们的作用或工作方式。当对象不同时,它们经常不同,但那不是一回事。如果您想要可靠的非冲突身份,有几个常用选项:
-
如果数据来自 RDBMS 或类似的;让 RDBMS 管理和发布身份令牌,并使用这些
使用对象引用本身;它很小,不透明,并且保证可以正常工作(在 32 位上,它的大小与
int
相同;在 64 位上是两倍,但是……嗯,通常没问题)
使用由您设计的某种机制发出的外部标识,通常是一个原子递增的整数,它可以是字典查找,也可以是值向量的偏移量,或者只是一个充当计数器的静态联锁相加字段;这确实会提示一些问题,即当应用程序生命周期内的分配数量接近十亿大关(并且您开始用完唯一的 int
值)时该怎么办,假设您不能简单地定期重置身份分配器(即“擦除宇宙”,竞技场分配风格
请注意,您可以将其中任何一个与“哈希码”概念结合起来,前提是您控制对象以使哈希码返回外部身份
【讨论】:
以上是关于基于对象值的一致的、唯一的值的主要内容,如果未能解决你的问题,请参考以下文章