第9题- hashCode() 与 equals().md

Posted dingwen_blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第9题- hashCode() 与 equals().md相关的知识,希望对你有一定的参考价值。

hash

hash哈希,也称为散列。基本原理是把任意长度的输入通过一定的映射规则转换为固定长度的输出。映射规则就是对应的哈希算法。由于输出空间值小于输入空间值,根据“抽屉原理”一定会存在不同的输入转换为相同的输出的情况。作为一个好的哈希算法需要做到让这种冲突发生的几率尽可能小。

hashCode()

hashCode()方法来自Object,Java中的任何类都有该方法。作用是获取哈希码(散列码)。返回值哈希码是一个int整数,此哈希码确定了该对象在哈希表中的索引位置。

分析HashSet检查重复

对象加入HashSet时,HashSet会先计算对象的hashcode值来判断对象加入的位置,看该位置是否有 值,如果没有、HashSet会假设对象没有重复出现。但是如果发现有值,这时会调用equals()方法来 检查两个对象是否真的相同。如果两者相同,HashSet就不会让其加入操作成功。如果不同的话,就会 重新散列到其他位置。这样就大大减少了equals的次数,相应就大大提高了执行速度。

  • 如果两个对象相等,hashcode值一定相等,equals()返回true
  • 两个对象hashcode相等,不一定是同一个对象,不一定相等

以上是关于第9题- hashCode() 与 equals().md的主要内容,如果未能解决你的问题,请参考以下文章

第9条:覆盖equals时总要覆盖hashCode

Java面试题:hashcode与equals

java面试题基础4

Java面试题QA

hashcode()与equals()方法(第8周)

每天一道Java题[3]