hashCode()方法用于给对象返回hash code值,equals()方法用 于判断其他对象与该对象是否相等。为什么需要这 两个方法呢?我们知道HashSet中是不允许添加重复元素的,那么当调用add()方法向HashSet中添加元素时,是如 何判断两个元素是不同的。这就用到了hashCode()和equals()方法。在添加数据时,会调用hashCode()方法得到ha sh code值,通过这个值可以找到数据存储位置,该位置可以理解成一片区域, 在该区域存储的数据的hashCode值 都是相等的。如果该区域已经有数据了,就继续调用equals()方法判断数据是否相等,如果相等就说明数据重复 了,就不能再添加了。如果不相等,就找到一个位置进行存储。 这些是基于哈希算法完成的,它使得添加数据的效率得到了提升。假设此时Set集合中已经有100个元素,那么如果 想添加第101个元素,如果此时没有使用哈希算法,就需要调用equals()方法将第101个元素与前100个元素依次进 行比较,如果元素更多,比较所耗费的时间就越长。 如果两个对象相等,那么他们的hashCode值一定相等。 反之,如果两个对象的hashCode值相等,那么这两个对象 不一定相等,还需要使用equals()方法进行判断。 如果不重写hashCode()方法,默认每个对象的hashCode()值都不一样,所以该类的每个对象都不会相等。