为什么重写equal方法时,要重写hashcode方法?

首先,hashmap是根据输入的键值的hashcode值进行定位的。

 

equal方法是当调用hashmap.get(key)方法时,在hashmap中检索找到key的hashcode所在,由于在hashmap中对于hash地址冲突采用的是链地址法,

 

对于哈希值相同,但是实际并不相同的key,通过链表存储起来。

 

那么怎样确定两个哈希值的key是否相同呢?采用的便是equal方法,默认的equal方法时直接返回两个对象的地址,在这种情况下基本不可能相等,如果需要实现我们自己的需求 就必须重写equal方法

 

同时,也必须重写hashcode方法,因为hashcode默认是对对象地址进行,这时候两个对象的hashcode并不相同,但是如果重写了某种equal方法,得到的返回值为true,但是在hashmap中确有两个entry,这时逻辑上错误,就不会返回相应的对象。

posted @ 2020-11-25 15:31  Coder_Dai  阅读(505)  评论(0)    收藏  举报