Java - 当两个键映射到相同值时返回什么?

Che*_*han 1 java map

在Java中,我理解如果两个键映射到一个值,则由于碰撞而发生线性链接.

例如:

?    Map myMap= new HashMap();   //Lets says both of them get mapped to same bucket-A and
    myMap.put("John", "Sydney");//linear chaining has occured.
    myMap.put("Mary","Mumbai"); //{key1=John}--->[val1=Sydney]--->[val2=Mumbai]
Run Code Online (Sandbox Code Playgroud)

所以当我这样做时:

myMap.get("John");   // or myMap.get("Mary")
Run Code Online (Sandbox Code Playgroud)

由于bucket-A包含两个值,JVM返回什么?它是否将引用返回"链"?它会回归"悉尼"吗?还是回归"孟买"?

Aja*_*rge 5

当您的密钥具有相同的哈希码时发生线性链接,而当两个键映射到一个值时不会发生线性链接.

所以当我这样做时:myMap.get("John"); //或myMap.get("Mary")

map.get("John") 给你悉尼

map.get("Mary") 给你孟买

由于bucket-A包含两个值,JVM返回什么?

如果同一个桶包含两个值,则equals使用密钥的方法来确定要返回的正确值.

值得一提的是存储(K,V)对的最坏情况,它们都具有与Key相同的hashCode.您的hashmap降级为该场景中的链接列表.