HashCode与Equals回顾
HashSet和HashMap一直都是JDK中最常用的两个类, HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键 。 那么Java运行时环境是如何判断HashSet中相同对象、HashMap中相同键的呢?当存储了“相同的东西”之后Java运行时环境又将如何来维护呢? 在研究这个问题之前,首先说明一下JDK对equals(Object obj)和hashcode()这两个方法的定义和规范: (1) 在Java中任何一个对象都具备equals(Object obj)和hashcode()这两个方法 ,因为他们是在Object类中定义的。 equals(Object obj)方法用来判断两个对象是否“相同”,如果“相同”则返回true,否则返回false。 hashcode()方法返回一个int数,在Object类中的默认实现是“将该对象的内部地址转换成一个整数返回”。 (2)接下来有两个个关于这两个方法的重要规范(我只是抽取了最重要的两个,其实不止两个): 规范1 : 若重写equals(Object obj)方法,有必要重写hashcode()方法(避免不必要的麻烦) ,确保通过equals(Object obj)方法判断结果为true的两个对象具备相等的hashcode()返回值。说得简单点就是:“如果两个对象相同,那么他们的hashcode应该 相等”