HashCode
什么是HashCode和HashCode()的作用
HashCode是Object类中的native本地方法,是用c/c++语言编程实现的,是用于获取该对象的哈希码的。
HashCode哈希码是某对象的内存地址通过哈希算法得到的数值,对应的着该对象在哈希表的位置,一般用于对象的快速查找的便捷性,可以方便的定位出某一对象的内存地址。
- 用于比较两个对象时,先可以进行两个对象的HashCode进行比较,避免了equals()方法的频繁使用,提高性能。
为什么要有HashCode?
此处使用 HashSet如何避免重复对象添加来说明:
- 当往HashSet集合里面添加对象是,会首先获取该对象的HashCode值,通过计算获取该对象加入的位置,同时与已经加入HashSet集合的对象的HashCode值进行比较。
- 当比较不同时,HashSet集合会假设两个对象不相同,正常添加到集合里面;当HashCode比较相同时,会再使用equals()方法进行比较,看是否两个对象相同。
- 当两个都相同时,HashSet集合将不添加此对象,如果两者不相同,则将该对象散列到其他位置
- 并且大大减少了equals()方法时重复使用,提高了执行速度。
重写equals()方法时为什么要重写HashCode()方法?
- HashCode()和equals()方法之间的关系应该符合:
1.当两个对象相同,(使用equals方法返回true),它们对应的HashCode也应该相同。
2.如果两个对象的HashCode相同,它们并不一定相同(使用equals()方法)。
综上述说:在覆盖了equals()方法的类上,也一定会覆盖HashCode()方法,否则会违背Object.HashCode的通用规则,导致该类不能与基于散列的集合一起正常运行;例如HashTable、HashMap、HasHSet.
----------另外,可以避免equals方法的多次使用,减少性能开销。