Java中重写equals方法为什么还要重写hashcode方法?

一、重写equals方法,还要重写hashcode就是要保证当两个对象equals的时候也要保证两者的hashcode值是一样的。 为什么要这么做?下面有俩个原则要知道:

1.两个对象如果互相equals,那么他们的hashcode值一定是相同的。

2.两个对象的hashcode值相同,他们不一定互相equals。

hashcode主要用于在HashMap、HashSet、HashTable等进行key值的比较,如果你不重写hashcode只重写equals,当两个对象互相equals的时候,那么这两个对象的hashcode值是不一样的。当你往HashMap以key的形式存入这两个对象,那么HashMap就认为你这两个对象不是同一个对象,就会将这两个值都存进去,出现矛盾。

二、hashcode()方法的作用?

Java中的hashCode方法就是根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值。主要是针对HashSet和Map集合类型,比如我们在向HashSet集合里边添加新元素的时候,由于set集合里边不允许元素重复,所以我们在插入新元素之前需要先判断插入元素是否存在,首先根据hashCode()方法得到该对象的hashCode值,如果集合里边不存在该值,可以直接插入进去。如果已经存在,则需要再次通过equals()来比较,这样的话可以提升效率。

在一个集合中,如果元素过多,当查找值得时候一个一个进行equals比较,效率会很低;而hashcode()方法得出现就大大减少了equals的次数。

你可能感兴趣的:(基础,java)