hashcode顾名思义是一个散列值码。
散列值,并不能表现其唯一性,但是具有离散性,其意义在于类似进行hashMap等操作时,加快对象比较的速度,进而加快对象搜索的速度。
hashcode和equals的关系
两个对象equals的时候,hashcode必须相等,但hashcode相等时,对象不一定equals。
在java中,equals和hashcode是有设计要求的,equals相等,则hashcode一定相等,反之则不然。
为什么会有这样的要求呢?
1、在集合中,比如HashSet中,要求放入的对象不能重复,怎么判定呢?
首先会调用hashcode,如果hashcode相等,则继续调用equals,如果equals也相等,则认为重复。
如果只重写了equals方法而没有重写hashcode方法,则hashcode就是继承Object的,返回内存编码,这时候可能出现equals相等,但是hashcode不等的情况。你的对象
使用集合时就会得不到你想要的结果。
最后明白两点就行了:
1、hashCode()方法存在的主要目的就是提高效率。
2、在集合中判断两个对象相等的条件,其实无论是往集合中存储数据,还是从集合中取数据,包括控制唯一性等,都是用这个条件判断的,条件如下:
首先判断两个对象的hashcode是否相等,如果不相等,就认为这两个对象不相等,就完成了。如果相等,才会判断两个对象的equals()方法是否相等,如果不相等,就认为
两个对象不相等,如果相等,那就认为这两个对象相等。