在HashMap中的put操作中,有一个判断:若“该key”对应的键值对已经存在,则用新的value取代旧的value。然后退出!源码为:
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
按我的理解,如果要判断key是否相等,直接用(k = e.key) == key || key.equals(k)不就行了吗?为何还有判断hash是否相等?
HashMap中hashCode和equals问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- danielinbiti 2015-04-12 14:19关注
个人这没什么意义,关键是先有的HashMap,那也就只能根据它的规则。
因为hashcode和equals是可以重写的,所以hash值一样,key值不一定一样。同理,key的值一样,不一定是同一个对象。
我觉得是看不同场景需要,多一种选择。解决 无用评论 打赏 举报