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

起因

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

源码分析

关于我在面试时答不上的HashMap问题_第1张图片
572行:get()方法底层,先比较了引用地址是否一样,如果引用地址不一样的情况下,再调用equals方法
关于我在面试时答不上的HashMap问题_第2张图片
148行:而object类调用equals方法时,首先会看具体的实现类有没有覆盖equals方法,如果没有覆盖则使用默认的equals方法比较引用地址。如果覆盖了则要看具体类里面equals方法的实现逻辑。

总结

所以我觉得比较好的回答是:key首先肯定会比较应用地址是否一样,不一样的情况下,会调用euqals方法比较,具体比较的是什么,要看具体的实现类。

你可能感兴趣的:(java)