共计 373 个字符,预计需要花费 1 分钟才能阅读完成。
起因
面试时面试官问我 hashMap 的 get 办法底层原理,我的答复是:依据传入的 key,做 hash 取余运算定位到具体的一个桶地位,之后再遍历链表或者红黑树,比拟 key 值是否一样。这里面试官就间接问我,那么他比拟 key 的时候,是比拟 key 外面的值还是比拟 key 的援用。我没能答上来。
源码剖析
572 行:get() 办法底层,先比拟了援用地址是否一样,如果援用地址不一样的状况下,再调用 equals 办法
148 行:而 object 类调用 equals 办法时,首先会看具体的实现类有没有笼罩 equals 办法,如果没有笼罩则应用默认的 equals 办法比拟援用地址。如果笼罩了则要看具体类外面 equals 办法的实现逻辑。
总结
所以我感觉比拟好的答复是:key 首先必定会比拟利用地址是否一样,不一样的状况下,会调用 euqals 办法比拟,具体比拟的是什么,要看具体的实现类。
正文完