使用 Java.util.LinkedHashMap 实现 LRU、FIFO 算法
2017-06-26 15:14
701 查看
使用 Java.util.LinkedHashMap 实现 LRU、FIFO 算法
一、LRU算法实现
package learn.lru; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; public class LRU<K, V> { private final int MAX_CACHE_SIZE; private final float DEFAULT_LOAD_FACTORY = 0.75f; LinkedHashMap<K, V> map; public LRU(int cacheSize) { MAX_CACHE_SIZE = cacheSize; int capacity = (int) (Math.ceil(MAX_CACHE_SIZE/DEFAULT_LOAD_FACTORY)+1); /** * @see java.util.LinkedHashMap */ map = new LinkedHashMap<K, V>(capacity, DEFAULT_LOAD_FACTORY, true){ protected boolean removeEldestEntry(java.util.Map.Entry<K,V> eldest) { return size() > MAX_CACHE_SIZE; }; }; } public synchronized void put(K key, V value){ map.put(key, value); } public synchronized V get(K key){ return map.get(key); } public synchronized void remove(K key){ map.remove(key); } public synchronized Set<Map.Entry<K, V>> getAll(){ return map.entrySet(); } @Override public String toString() { StringBuilder sb = new StringBuilder(); for(Map.Entry<K, V> entry : map.entrySet()) sb.append(String.format("%s:%s ", entry.getKey(), entry.getValue())); return sb.toString(); } public static void main(String[] args) { LRU<Integer, Integer> lru = new LRU<Integer, Integer>(5); lru.put(1, 1); lru.put(2, 2); lru.put(3, 3); System.out.println(lru); lru.get(1); System.out.println(lru); lru.put(4, 4); lru.put(5, 5); lru.put(6, 6); System.out.println(lru); } }
二、效果
1:1 2:2 3:3 2:2 3:3 1:1 3:3 1:1 4:4 5:5 6:6
三、FIFO算法实现
将LRU.java第19行改为map = new LinkedHashMap<K, V>(capacity, DEFAULT_LOAD_FACTORY, false)
一一一一一一一一一一一一一一一一一一一一一一一一一 传送门 一一一一一一一一一一一一一一一一一一一一一一一一一一一
文章系转载,更多详情见:Java实现缓存(LRU,FIFO)
相关文章推荐
- java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现
- java中使用FIFO队列:java.util.Queue实现多台服务器发邮件的代码
- LRU算法的实现使用linkedHashMap方法,以及使用双链表+hashtable方法
- java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现
- java中使用FIFO队列:java.util.Queue实现多台服务器发邮件的代码
- java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现
- 最近最久未使用页面淘汰算法———LRU算法(java实现)
- 使用LinkedHashMap来实现一个使用LRU(Least Recently Used)算法的cache
- 近期最久未使用页面淘汰算法———LRU算法(java实现)
- Android使用LinkedHashMap实现一个LRU算法的内存缓存
- 最近最久未使用页面淘汰算法———LRU算法(java实现)
- 使用 LinkedHashMap 实现 LRU 算法
- FIFO与LRU 算法实现(java)
- 使用Spring来实现任务计划服务一:继承java.util.TimerTask
- LinkedHashMap和HashMap的比较使用 由于现在项目中用到了LinkedHashMap,并不是太熟悉就到网上搜了一下。 ? import java.util.HashMap; impo
- Java缓存的Lru算法实现---并对Android util类LruCache的改进
- LRU (Least Recently Used) 算法的Java实现
- 使用栈实现括号匹配算法-java
- 大三上学期,使用Java不完整实现Lee寻址算法。
- 使用java.util.concurrent实现的线程池、消息队列功能