Discuss / Java / java哈希笔记

java哈希笔记

Topic source
* 相同的输入一定有相同的输出
* 不同的输入可能有相同的输出
* 好的hash加密一定是碰撞概率低的

嗨!好的,让我尝试用简单的语言来解释。

想象一下,你有一个特殊的盒子,你把一些东西放进去。每次你想找到这个盒子时,你都会通过它的标签或者是一个特殊的号码来找到它。这个标签或号码就像是 Java 中对象的 hashCode。它可以帮助你快速地找到你想要的东西。

现在,假设你有两个盒子,它们的内容看起来完全一样。但是,如果你只是简单地比较它们的内容,你并不能确定它们是不是相同的盒子。所以,你需要一种方法来确保你可以正确地找到这些盒子,即使它们的内容相同。

这时候,equals() 方法就派上用场了。你可以通过 equals() 方法来比较两个对象的内容是否相同。但是,如果你只覆盖了 equals() 方法而没有正确覆盖 hashCode() 方法,那么你就有可能出现这样的情况:两个内容相同的对象在 HashMap 或者 HashSet 这样的集合中却被认为是不同的对象,因为它们的 hashCode 不同。这就像你有两个看起来一样的盒子,但是它们的标签或号码却不同,导致你无法正确地找到它们。

所以,为了保证在集合中使用对象时的正确性,你需要正确地实现 hashCode() 方法,以便当你需要在集合中找到对象时,可以通过它们的 hashCode 来快速地定位它们。这样,即使两个对象的内容完全相同,它们也会被正确地处理。


  • 1

Reply