【发布时间】:2015-09-25 06:46:19
【问题描述】:
HashMap 使用用户提交的密钥生成一个 hashCode。以下可能是两种情况:
1) 如果两个键(Object)相同:
例如
hashmap.put(1,"one");
hashmap.put(1,"another one");
现在,最初会插入“一个”,然后会被“另一个”覆盖。
2) 如果两个不同对象的 hashCode 相同: 例如,如果我有一个 5 号的桶,我尝试:
hashmap.put(5,"this is five");
hashmap.put(25,"this is twenty five");
由于 hash % (SIZE-1) 将指向相同的位置,因此将创建 LinkedList 以将值存储为:
"this is twenty five" -> "this is five"
如有错误请指正
【问题讨论】:
-
你几乎是对的。但是,Java 不一定使用链表来存储相同存储桶中的值。如果桶中有足够的值,它将使用红黑树(一种二叉搜索树)而不是列表。这是 Java 8 的一个新特性,在某些情况下可以加快速度。除了那个细节,你的基本理解是正确的。
-
从功能的角度来看,你可以忽略
HashMap,只使用为Map指定的合约。只有在处理诸如性能之类的非功能方面时,实现是HashMap才会变得有趣。