两者间的关系:
equals()相等的两个对象,hashcode()一定相等;
equals()不相等的两个对象,hashcode()有可能相等。
hashcode()不等,一定能推出equals()也不等;
hashcode()相等,equals()可能相等,也可能不等。(hash碰撞,产生了相同的hash码)
对hashCode方法重写,以保证相同的对象返回相同的hash值,不同的对象返回不同的hash值。
还要强调一下hashCode()效率是比equals()效率高的,所以判断元素是否相等时先用hashCode()判断,如果hashCode()不同,则对象不等,如果hashCode()相同,再比较equals() ,大大提高了效率。所以我们要保证如果重写了equals(),也要重写hashCode()。