hashcode算法的实现
- String,Integer等类复写了hashcode方法,有自己的实现方式
- Object类调用本地方法库实现了,可以用来比较内存地址,不是java编写的源码
- 每个类都可以复写hashcode方法,但要遵守一定的规则
equal
- equal也可以被复写,大部分对象中都是比较值是否相等,但在Object类中却是比较值是否相等
hashcode和equal的关系
- 由以上的定义不难看出,hashcode算法一定程度上是根据对象的内容来计算hash值的,因此equal判定相等的对象,hashcode一定相等,反之不然
HashMap的设计
- hashMap中,我们通常会选取String等数据类型作为主键,因为其中复写了hashcode方法,实现了我们所需的逻辑:相同的key一定有相同的hashcode
- 那一定有相反的情况了,比如,我们用自定义的类(未复写hashcode方法)作为key会有什么结果:
- 首先,该类会继承Object的hashcode方法,那么此处得到的hashcode值A就仅仅是一个实例对象的虚拟内存地址,如果重新创建一个与该对象相同内容的新对象,新对象的hashcode值B将不会等于A,也就不满足设计条件