关于我在面试时答不上的HashMap问题

起因 面试时面试官问我hashMap的get方法底层原理,我的回答是:根据传入的key,做hash取余运算定位到具体的一个桶位置,之后再遍历链表或者红黑树,比较key值是否一样。这里面试官就直接问我,那么他比较key的时候,是比较key里面的值还是比较key的引用。我没能答上来。
源码分析 关于我在面试时答不上的HashMap问题
文章图片

572行:get()方法底层,先比较了引用地址是否一样,如果引用地址不一样的情况下,再调用equals方法
关于我在面试时答不上的HashMap问题
文章图片

148行:而object类调用equals方法时,首先会看具体的实现类有没有覆盖equals方法,如果没有覆盖则使用默认的equals方法比较引用地址。如果覆盖了则要看具体类里面equals方法的实现逻辑。
总结 【关于我在面试时答不上的HashMap问题】所以我觉得比较好的回答是:key首先肯定会比较应用地址是否一样,不一样的情况下,会调用euqals方法比较,具体比较的是什么,要看具体的实现类。

    推荐阅读