一篇文章让你精通:java集合讲解(六,Map源码了解)

13 篇文章 0 订阅

相信大家学习了之前的内容对Map有了一定的了解,下面就让我们加深对map的了解,一起来看看hashmap,linkhashmap,treenmap的源码进行简单了解。

 HashMap

1,jdk1.7及以前,hashmap以一个数组加链表实现的存储结构

 2,每一个节点是一个Entry,其中包括:键(key),值(value),键的哈希码(hash),下一个节点的引用next(指向下一个Entry)四个部分。

 3,如果你的key是null,添加数据放在索引为0的位置,查找也是从0的位置。

4,在调用put方法添加键值对时,哈希表三步添加键值对原理实现:是计算keyd的哈希码,与value无关

5,jdk1.7中put方法添加键值对时,当没有key哈希码不同时,添加在链表的第一个位置(头插法),key相同时,后面添加value覆盖前面添加value。(在jdk1.8后就是尾插法,添加在链表后面)

6,get方法根据key获取value,实际上根据key找到Entry,Entry找到value。

7,当我们添加元素到12(可以自己设置:数组长度(默认16)*填充因子(默认0.75f))数组扩容原来二倍(满足达到阈值,主数组没有新存储位置有节点)

8,jdk1.8后的变化:当链表存储数据>=8,不采用链表进行存储,采用红黑树进行存储(提高效率,增加查询速率)

TreeMap

 1,每一个节点是一个Entry,其中包括:key,value,左孩子,右孩子,根(默认是黑色)

2,添加原理(1,添加第一个元素默认为根,2,再次提交,就需要运用外部比较器与根进行比较(第一次比较都是比较根),如果外部比较器为null,就使用内部比较器进行比较。然后添加,当添加key相同,value进行覆盖,3,比较比根小,添加在左节点,比根大,添加在右节点(如果下面还有就继续向下比较)

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韶光不负

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值