为什么重写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,这时逻辑上错误,就不会返回相应的对象。
浙公网安备 33010602011771号