Stack:LIFO
ArrayList & LinkedList
LinkedList中实现的:
单向链表
+push(in:E e){//方法体:通过使用addFirst(e)}+pop(){//通过使用removeFirst();}同理:也可以通过操作队尾实现。//addLast(e) && removeLast();
Queue:FIFO
Queue && Deque
双向链表:通过实现ListIterator接口
LinkedHashMap实现
LRU:last recently used 算法
public static void main(String[] args) {
//LRU:Least Recently Used,最近最少使用
//缓存:缓存热点数据,经常使用的数据
// 一种淘汰算法:
//当缓存已满时,再向缓存内添加内容时,删除(淘汰)掉缓存中已存在元素最近最少被使用的那个
//LinkedHashMap 支持LRU算法,
//LinkedHashMap 具有HashMap 的所有功能 +可保持插入顺序(遍历)
//HashMap + 双向链表
//双向链表:head、tail;after、before
//LinkedHashMap是有序的 boolean accessOrder
//1. 插入顺序:每次插入元素,将元素放到双向链表的末尾
//2. 访问顺序:每次插入、获取元素,将该元素放到双向链表的末尾
//---put()、get()元素放置末尾
//LinkedHashMap linkedHashMap = new LinkedHashMap(5);
LRU<String,String> lru = new LRU<>();
lru.put("001","macro");
lru.put("002","macro");
lru.put("005","macro");
lru.put("003","macro");
lru.put("004","macro");
System.out.println(lru);
System.out.println(lru.get("005"));
System.out.println(lru);
System.out.println(lru.put("004","huge"));
System.out.println(lru);
System.out.println(lru.put("064","huge"));
System.out.println(lru);
}
static class LRU<K,V> extends LinkedHashMap<K,V> implements Map<K,V> {
private int max = 5;
public LRU(){
//accessOrder: true---访问顺序;false---插入顺序
super(10,0.75f,true);
}//本质:在添加元素过程中,(业务流程决定:会调用removeEldestEntry()操作)
@Override
protected boolean removeEldestEntry(Entry<K, V> eldest) {
if(size()>max){
System.out.println("淘汰掉的元素:"+eldest);
return true;
}
return false;
}
}