基于对象值的一致的、唯一的值

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 值)时该怎么办,假设您不能简单地定期重置身份分配器(即“擦除宇宙”,竞技场分配风格

请注意,您可以将其中任何一个与“哈希码”概念结合起来,前提是您控制对象以使哈希码返回外部身份

【讨论】:

以上是关于基于对象值的一致的、唯一的值的主要内容,如果未能解决你的问题,请参考以下文章

变量和值的延伸思考

Python中的is和==的区别,is判断值是否相等,id判断地址是否一致

两个不同对象数组中唯一值的计数

laravel 基于另一列值的唯一验证规则

“重新索引仅对具有唯一值的索引对象有效”

解决重新索引仅对具有唯一值的索引对象有效