java-HashMap&LinkedHashMap 源码分析

HashMap

底层结构:数组(根据hashcode判断k,v的存储地址 即不同key可能有相同的hashCode)+链表(链表长度>8会先扩容 数组长度扩容到64树化)/红黑树(数组长度到64会树化)
在这里插入图片描述
hashMap遍历-六大遍历方式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

扩容机制
loadFactor 负载因子
loadFactor 的默认值为 0.75f。给定的默认容量为 16,负载因子为 0.75。Map 在使用过程中不断的往里面存放数据,当数量超过了 16 * 0.75 = 12 就需要将当前 16 的容量进行扩容
在这里插入图片描述

LinkedHashSet

在这里插入图片描述

LinkedHashMap

保证顺序:每个链表记录上一个插入的节点和下一个插入节点 head指向第一个元素 tail指向最后一个元素
在这里插入图片描述

特点:
1.支持遍历时会按照插入顺序有序进行迭代。
2.支持按照元素访问顺序排序,适用于封装 LRU 缓存工具

使用LinkedHashMap实现LRU 缓存

具体实现思路如下:
1.继承 LinkedHashMap;
2.构造方法中指定 accessOrder 为 true ,这样在访问元素时就会把该元素移动到链表尾部,链表首元素就是最近最少被访问的元素;
3.重写removeEldestEntry 方法,该方法会返回一个 boolean 值,告知 LinkedHashMap 是否需要移除链表首元素(缓存容量有限)。
代码如下:

public class LRUCache<K, V> extends LinkedHashMap<K, V> {
   
    private final int capacity;

    public LRUCache(int capacity) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

没脑袋的喵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值