【发布时间】:2017-06-25 23:02:27
【问题描述】:
我想根据对象生成 UUID。相等的对象需要具有相同的 UUID。
我了解了类型 3 UUID,其值基于名称和命名空间。 java.util.UUID 有一个 nameUUIDFromBytes 方法,它接受一个字节数组作为参数。
所以我正在考虑将我的对象序列化为字节数组并将它们提供给nameUUIDFromBytes 方法。
但我对 UUID 的命名空间方面感到困惑。这是否意味着 UUID 在另一台机器上生成时会有所不同?
生成 UUID 的最佳方法是什么,例如当 obj1.equals(obj2) == true,然后 uuid1.equals(uuid2) == true,即使 uuid1 是在 uuid2 之外的另一台机器上生成的?
编辑:对于那些投票认为它与如何实现 hashCode 重复的人,请重新打开它。我问的是 UUID,而不是 hashCodes。除非您认为生成 UUID 的最佳方法是使用 hashCode。如果是这样,请写一个答案,说明为什么这是最好的方法,而不是用几乎没有任何关系的东西来结束这个问题。
【问题讨论】:
-
覆盖等于
-
是否有隐含的“不相等的对象不能有相同的 UUID”?
-
@ΦXocę웃Пepeúpaツ 我应该指定:我显然会覆盖 equals 方法。这不是这里的问题。问题是如何生成 UUID。
-
@roeygol 除非您建议基于 hashCodes 生成 UUID,否则我几乎不认为这些是重复的问题。