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)