hashCode()
hashCode():hashCode就是对象的散列码,是根据对象的某些信息推导出的一个整数值,默认情况下表示是对象的存储地址。通过散列码,可以提高检索的效率,主要用于在散列存储结构中快速确定对象的存储地址
equals()
equasl():一般情况下重写后的equasl()是用来比较两个变量的内容是否相等,如果没有重写equals()方法的话,其作用和 == 是一样的,比较的是两个变量在内存中的地址。
相同之处
两者都是Object基类中的方法,两个方法都会被继承给所有的类。
hashCode是根据统一计算方式返回一个对象的hash码,常见的有取余算法等…,重写hashCode方法就是重写里面计算哈希码的方式或规则。
区别之处
1、hashCode方法的返回值是是int类型的哈希码,equals方法返回的是boolean型的值
2、hashCode是一个native修饰的方法,equals是一个Java方法
关联
1、当两个变量的hashCode返回的数值一样时,equals返回的不一定是true
2、当两个变量的equals方法返回true时,此时两个变量的hashCode返回的数据一定是一样的
经典案例
哈希碰撞:当map集合的key存储value值时会判断新存入的key是否在在map中存在哈希值一样的key值,如果存在hashCode一样的key值,此时会发生哈希碰撞。会根据equals方法判断两个key值内容是否一致,如果两个元素的key值的hashCode是一样的而equals返回值是不一样的这就是哈希碰撞。此时存入map的key对应的value值不会覆盖原本的值,而是一个新的元素。当hashCode存在一致的key值,且此key值与需要存入的key值的equals返回也为true,则该key对应的value会发生覆盖,将原本key对应的value值覆盖掉。
内容来源于网络,本人学习Java后工作之余整理出来,欢迎各位大佬查漏补缺