两个方法都间接继承自Object;HashMap:hashCode()返回此映射的哈希码值;equals(Object obj)比较指定的对象与此映射是否相等.
集合通常用来存储对象,若想保证HashMap存储元素唯一,通常要覆盖上面2个方法。
有人说覆盖equals方法就可以了啊;是可以(如ArrayList集合),但是效率低,试想每个元素都要用自己的equals去与之前元素的equals
方法比较,繁琐而又复杂;于是java先贤想了个办法,先比较元素的hashCode,若hashCode相同则再比较equals,这涉及到数据底层设计。
其实HashMap数据表结构是哈希表结构,集合分成若干个存储区域,每个对象可以计算一个哈希码,哈希码分组,每组分别对应某个存储区域;
查找某个对象时,JAVA首先获得对象的哈希吗,然后找到相应的存储区域,取出存储区域的每个元素与该对象进行equals比较
通常来说,一个类的两个实例对象用equals方法比较的结果相等时,hashcode必相等,反之则不成立 |