*阿炮的Java笔记008号*-会持续更新的Map笔记

老生常谈…对于大佬们根本都不用看的博客!

对于像我这种菜鸡还是得一步一步的来!如果有错误请大佬们指点指点!

Map集合

概念

  • 保存具有映射关系的数据:K-V结构;
  • key 和 value 可以是任何引用类型的数据;
  • key不允许重复,类必须重写equals() 和 hashCode() ;
  • 一对一的关系,通过指定一个key能够找到唯一的value;

Map的子孙类

HashMap的底层是 数组+链表+红黑树 (红黑树是JDK8增加的);
LinkedHashMap的底层同上,增加了双向链表保证顺序;
Hashtable的底层同HashMap;
TreeMap的底层是红黑树结构;

HashMap

HashMap的概况

  • 允许使用 null 键和 null 值;
  • 不能保证存储的顺序;
  • key不允许重复;
  • value允许重复;

HashMap的底层

JDK7:数组+链表结构;
JDK8:数组+链表+红黑树;
链表转红黑树的条件:①链表长度大于8;②数组长度大于64;
红黑树转链表的条件:链表的长度小于6;

为什么会有这种变化?
HashMap采用链地址法,当发生冲突时会转化为链表,当链表过长会转化为红黑树提高效率。

HashMap的扩容

  • 加载因子决定了HashMap扩容的阈值,需要权衡时间与空间,一般情况下默认为0.75;
  • 每次扩展数组都是原来的2倍;
    数据迁移的优化:
  • JDK7:遍历所有的节点依次通过hash函数计算新的下标,再插入到新数组的链表中;(会有多余的计算以及多线程情况下形成链表环)
  • JDK8:控制数组的长度始终为长2的整数次幂,key只会在在原来的位置,或者在原来位置+原数组长度。

LinkedHashMap

LinkedHashMap的概况

  • HashMap 的子类
  • 拥有双向链表来记录添加元素的顺序;

Hashtable

Hashtable的概况

  • 线程安全;
  • 实现原理和 HashMap 相同,功能相同;
  • 底层使用哈希表结构,查询速度快;
  • 不允许使用 null 作为 key 和 value;

TreeMap

TreeMap的概况

  • 底层使用红黑树;
  • 对key进行排序,与TreeSet大体相同。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

史上最菜的山炮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值