关于我在面试时答不上的HashMap问题
起因
面试时面试官问我hashMap的get方法底层原理,我的回答是:根据传入的key,做hash取余运算定位到具体的一个桶位置,之后再遍历链表或者红黑树,比较key值是否一样。这里面试官就直接问我,那么他比较key的时候,是比较key里面的值还是比较key的引用。我没能答上来。
源码分析
文章图片
572行:get()方法底层,先比较了引用地址是否一样,如果引用地址不一样的情况下,再调用equals方法
文章图片
148行:而object类调用equals方法时,首先会看具体的实现类有没有覆盖equals方法,如果没有覆盖则使用默认的equals方法比较引用地址。如果覆盖了则要看具体类里面equals方法的实现逻辑。
总结
【关于我在面试时答不上的HashMap问题】所以我觉得比较好的回答是:key首先肯定会比较应用地址是否一样,不一样的情况下,会调用euqals方法比较,具体比较的是什么,要看具体的实现类。
推荐阅读
- 我要做大厨
- 一个小故事,我的思考。
- 家乡的那条小河
- 第三节|第三节 快乐和幸福(12)
- 你到家了吗
- 这辈子我们都不要再联系了
- 死结。
- 跌跌撞撞奔向你|跌跌撞撞奔向你 第四章(你补英语,我补物理)
- 闲杂“细雨”
- 杜月笙的口才