java-为对象生成唯一的md5哈希

java-为对象生成唯一的md5哈希,java,hash,unique,md5,hashcode,Java,Hash,Unique,Md5,Hashcode,我需要为对象生成唯一的散列,以标识具有相同确切属性的对象 在阅读了一些关于这个主题的文章后,我决定最好使用MD5哈希而不是java哈希代码(我有大量的对象,大约200000-300000) 我找到了很多关于如何在字符串上执行MD5哈希的示例,但没有找到如何在对象上执行MD5哈希,因此根据对象的属性,它确实是唯一的。对象的哈希代码不需要是唯一的。顺便说一句,这是不可能的 哈希代码必须符合以下合同: 每次在相同状态的相同对象上调用它时,它都应该返回相同的值 如果根据Object::equals两个

我需要为对象生成唯一的散列,以标识具有相同确切属性的对象

在阅读了一些关于这个主题的文章后,我决定最好使用MD5哈希而不是java哈希代码(我有大量的对象,大约200000-300000)


我找到了很多关于如何在字符串上执行MD5哈希的示例,但没有找到如何在对象上执行MD5哈希,因此根据对象的属性,它确实是唯一的。

对象的哈希代码不需要是唯一的。顺便说一句,这是不可能的

哈希代码必须符合以下合同:

  • 每次在相同状态的相同对象上调用它时,它都应该返回相同的值
  • 如果根据
    Object::equals
    两个对象相等,则
    hashCode
    应返回相同的值
大多数IDE都可以生成方法
hashCode()
,但甚至在JDK中也有一些工具用于生成hashCode,例如
java.util.Objects.hash(Object…


你可以阅读一篇很好的总结

看看和谷歌上的一些例子。我的意思是我希望两个具有相同属性的对象具有相同的哈希/字符串标识符。也许不清楚-这样我就可以检测到是否有类似的物体并跳过它。你是对的,我不清楚。考虑到相似或相等的对象的属性,是否要检测它们?我认为
equals()
可能是后者的一个选项……我有200000个对象要处理。对于我处理的每一个对象,我都会生成一个散列并将其存储在缓存中,这样下次我得到一个具有相同属性的对象时,我就会知道跳过它——所以我需要相等的对象(在属性方面),Java对对象的“属性”没有正式定义,所以这个概念对您来说只有意义。您需要一种方法对这些“属性”进行排序,以便具有相同“属性”的两个对象可以以相同的顺序生成它们。然后需要将这些属性转换为字节数组,并将它们提供给哈希函数。通过覆盖
hashCode
equals
,这似乎可以通过标准方式实现,我看不出使用MD5有什么价值。根据您提供的有限信息,标准的
集合
地图
应该足以满足您的需求。