基于Object-Values的一致的、唯一的值



我有一个对象,它需要一个唯一值来标识自己。如果Object-Content是相同的,这个唯一值必须总是相同的,所以在创建时生成UUID或GUID是不可能的。

我考虑了基于其成员的哈希对象,并找到了一些关于如何编写哈希方法的想法,但我如何确保我自己的HashCode-Function永远不会偶然与另一个对象发生冲突?

哈希码并不是希望是唯一的——这不是它们的作用或工作方式。当对象不同时,它们经常不同,但是这不是同一件事。如果您想要可靠的非冲突标识,有几个常见的选项:

  1. 如果数据来自RDBMS或类似的数据库;让RDBMS管理和发布身份令牌,并使用那些
  2. 使用对象引用本身;它很小,不透明,并且保证正确工作(在32位上,它与int大小相同;在64位上是这个的两倍,但是……嗯,通常都很好)
  3. 使用由您设计的某种机制发出的外部标识,通常是一个自动递增的整数,它可以是字典查找,或者是值的向量的偏移量,或者只是一个静态的互锁添加字段,就像计数器一样;这个确实提示了一些问题,关于当应用程序生命周期内的分配数量接近十亿标记时该怎么办(并且您开始耗尽唯一的int值),假设您不能简单地定期重置身份分配器(即"擦除宇宙",竞技场分配风格
  4. )。

请注意,可以将其中任何一个与"hashcode"概念,如果控制对象使hashcode返回外部标识

最新更新