9.24HashMap和LinkedHashMap大概理解

  HashMap

HashMap是基于哈希表的 Map 接口的实现。HashMap是数组加链表组成的复合结构,HashMap的主干是数组,其中数组被分为一个个桶(bucket),每个桶存储有一个或多个键值对,每个键值对也称为  Entry ,通过哈希值决定了Entry对象在这个数组的下标;哈希值相同的Entry对象(键值对),则以链表形式存储。

通俗理解:调用put函数,传入一个key,value对,将对key进行哈希算法得出一个值,比如为x,然后将key,value对放到数组中下标为x的位置。

当由key计算出来的值相同时,会发生数据的碰撞,采用链表对数据进行储存。

JDK1.8 版本的HashMap,底层数据使用数组 + 链表/红黑树实现。

HashMap的默认负载因子是0.75,理论上来讲,负载因子越大,导致哈希冲突的概率也就越大,负载因子越小,费的空间也就越大,这是一个无法避免的利弊关系,所以通过一个简单的数学推理,可以测算出这个数值在0.75左右是比较合理的。阈值(threshold) = 负载因子(loadFactor) x 容量(capacity) 根据HashMap的扩容机制,他会保证容量(capacity)的值永远都是2的幂 为了保证负载因子x容量的结果是一个整数,这个值是0.75(4/3)比较合理,因为这个数和任何2的次幂乘积结果都是整数。

HashMap的扩容机制:到达阈值值时扩容,每次扩容都是以 2的整数次幂进行扩容

HashMap中初始化大小是16

LinkedHashMap

LinkedHashMap 通过特有底层双向链表的支持,使得LinkedHashMap可以保存元素之间的顺序,例如插入顺序或者访问顺序,而HashMap因为没有双向链表的支持,所以就不能保持这种顺序,所以它的访问是随机的。

LinkedHashMap比HashMap多了两个指针用来表示元素顺序。

LinkedHashMap继承了HashMap类,具有大多数HashMap的方法
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值