文章目录
- `hash`
- `hashCode()`
- 分析`HashSet`检查重复
hash
hash
哈希,也称为散列。基本原理是把任意长度的输入通过一定的映射规则转换为固定长度的输出。映射规则就是对应的哈希算法。由于输出空间值小于输入空间值,根据“抽屉原理”一定会存在不同的输入转换为相同的输出的情况。作为一个好的哈希算法需要做到让这种冲突发生的几率尽可能小。
hashCode()
hashCode()
方法来自Object,Java中的任何类都有该方法。作用是获取哈希码(散列码)。返回值哈希码是一个int
整数,此哈希码确定了该对象在哈希表中的索引位置。
分析HashSet
检查重复
对象加入HashSet时,HashSet会先计算对象的hashcode值来判断对象加入的位置,看该位置是否有 值,如果没有、HashSet会假设对象没有重复出现。但是如果发现有值,这时会调用equals()方法来 检查两个对象是否真的相同。如果两者相同,HashSet就不会让其加入操作成功。如果不同的话,就会 重新散列到其他位置。这样就大大减少了equals的次数,相应就大大提高了执行速度。
- 如果两个对象相等,
hashcode
值一定相等,equals()
返回true - 两个对象
hashcode
相等,不一定是同一个对象,不一定相等