HashMap实现原理:容量、负载因子、hash与定位都搞定了吗?( 七 )
final Node<KV> getNode(int hash Object key) {
Node<KV>[
tab; Node<KV> first e; int n; K k;
if ((tab = table) != null && (n = tab.length) > 0 &&
(first = tab[(n - 1) & hash
) != null) {
if (first.hash == hash && // always check first node
((k = first.key) == key || (key != null && key.equals(k))))
return first;
if ((e = first.next) != null) {
if (first instanceof TreeNode)
return ((TreeNode<KV>)first).getTreeNode(hash key);
do {
if (e.hash == hash &&
((k = e.key) == key || (key != null && key.equals(k))))
return e;
while ((e = e.next) != null);
return null;
判断元素相等的设计比较经典 , 利用了bool表达式的短路特性:先比较hash值;如果hash值相等 , 就通过==比较;如果==不等 , 再通过equals方法比较 。 hash是提前计算好的;==直接比较引用值;equals方法最有可能耗费性能 , 如String的equals方法需要O(n)的时间 , n是字符串长度 。 一定要记住这里的判断顺序 , 很能考察对碰撞处理源码的理解 。
推荐阅读
- 左慈|三国杀:技能缝接,超强发挥,用左慈就能实现
- 商人|游戏商人的月入百万是真的吗?揭秘真实的剑三游戏商人真实现状
- fly|从电竞迈向艺术:Fly选手实现人生跨越,成历史第一人!
- 赤色要塞|玩经典游戏《赤色要塞》魔改版:吉普车也能用激光炮,童年梦想实现了
- 手机游戏|梦幻西游手游:封系统治擂台?浅谈经脉学问,方寸也能实现双封!
- 魂斗罗|“为什么魂斗罗内存这么少,却可以实现那么长的剧情?”
- rw战队|KPL前瞻:Hero对阵RW侠首发公布,黑鲸的Flag真有可能实现
- 单机|《仙剑奇侠传七》逆风翻盘!蒙尘的老牌IP,终于实现了自我救赎
- LGD|Ti10:LGD实现逆天翻盘锁定总决赛,虎牙Sccc激动到泪目
- 美好世界|“我们的工作只是实现人类的愿望,而不是创造一个我们认为的《美好世界》”