HashMap的数据存储实现原理

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 21:03   4410   0

流程:

1. 根据key计算得到key.hash = (h = k.hashCode()) ^ (h >>> 16);

2. 根据key.hash计算得到桶数组的索引index = key.hash & (table.length - 1),这样就找到该key的存放位置了:

① 如果该位置没有数据,用该数据新生成一个节点保存新数据,返回null;

② 如果该位置有数据是一个红黑树,那么执行相应的插入 / 更新操作,稍后再详细讨论红黑树;

③ 如果该位置有数据是一个链表,分两种情况一是该链表没有这个节点,另一个是该链表上有这个节点,注意这里判断的依据是key.hash是否一样:

如果该链表没有这个节点,那么采用尾插法新增节点保存新数据,返回null;

如果该链表已经有这个节点了,那么找到該节点并更新新数据,返回老数据。

注意:

HashMap的put会返回key的上一次保存的数据,

比如:

HashMap<String, String> map = new HashMap<String, String>();

System.out.println(map.put("a", "A")); // 打印

null System.out.println(map.put("a", "AA")); // 打印

System.out.println(map.put("a", "AB")); // 打印AA

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP