在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返回什么?它是否将引用返回"链"?它会回归"悉尼"吗?还是回归"孟买"?
当您的密钥具有相同的哈希码时发生线性链接,而当两个键映射到一个值时不会发生线性链接.
所以当我这样做时:myMap.get("John"); //或myMap.get("Mary")
map.get("John") 给你悉尼
map.get("Mary") 给你孟买
由于bucket-A包含两个值,JVM返回什么?
如果同一个桶包含两个值,则equals使用密钥的方法来确定要返回的正确值.
值得一提的是存储(K,V)对的最坏情况,它们都具有与Key相同的hashCode.您的hashmap降级为该场景中的链接列表.