Hash Code 和 Equals 的学习笔记html
一. Definition程序员
1)什么是Hash Code?学习
hash code是一种编码方式,在Java中,每一个对象都会有一个hashcode,Java能够经过这个hashcode来识别一个对象。至于hashcode的具体编码方式,比较复杂(事实上这个编码是能够由程序员经过继承和接口的实现重写的)。编码
用最简单的方法来讲,hashcode就是一个签名。当两个对象的hashcode同样时,两个对象就有可能同样。若是不同的话两个对象就确定不同。 通常用hashcode来进行比较两个东西是否是同样的,能够很容易的排除许多不同的东西。 最经常使用的地方就是在一堆东西里找一个东西。先用你要找的东西的hashcode和全部东西的hashcode比较,若是不同的话就确定不是你要找的东西。若是同样的话就极可能是你要找的东西。而后再进行仔细的比较两个东西是否是真的如出一辙。spa
2)什么是Equals?code
equals() 方法用于将字符串与指定的对象比较。htm
这个方法首先比较的是两个对象的地址是否相同,若是相同直接返回true,不然, 对象
(1)若是是string类型的先比较是不是string类型,是的话,再比较是否长度相同,相同的话再比较,每一个字符是否相同;blog
(2)判断两个对象是不是同一个类加载器加载的,不是则返回false;继承
(3)若是是普通对象则将对象的属性放入hashmap中做为key, 属性中的值做为value,以此做为比较的方式。
二. Feature:
1)Hash code
关于hashCode方法,一致的约定是:
重写了euqls方法的对象必须同时重写hashCode()方法。
若是2个对象经过equals调用后返回是true,那么这个2个对象的hashCode方法也必须返回一样的int型散列码
若是2个对象经过equals返回false,他们的hashCode返回的值容许相同。(然而,程序员必须意识到,hashCode返回独一无二的散列码,会让存储这个对象的hashtables更好地工做。
2)Equals
按照约定,equals要知足如下规则。
自反性: x.equals(x) 必定是true
对null: x.equals(null) 必定是false
对称性: x.equals(y) 和 y.equals(x)结果一致
传递性: a 和 b equals , b 和 c equals,那么 a 和 c也必定equals。
一致性: 在某个运行时期间,2个对象的状态的改变不会不影响equals的决策结果,那么,在这个运行时期间,不管调用多少次equals,都返回相同的结果。
三. Relationship
一、equals方法用于比较对象的内容是否相等(覆盖之后);
二、hashcode方法只有在集合中用到;
三、当覆盖了equals方法时,比较对象是否相等将经过覆盖后的equals方法进行比较(判断对象的内容是否相等);
四、将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,若是不相等直接将该对象放入集合中。若是hashcode值相等,而后再经过equals方法判断要放入对象与集合中的任意一个对象是否相等,若是equals判断不相等,直接将该元素放入到集合中,不然不放入。
摘自:https://www.cnblogs.com/lulipro/p/5628750.html
https://www.cnblogs.com/wangnuo/p/7744891.html
https://www.cnblogs.com/keyi/p/7119825.html