最簡單的LRU演算法java實現
LRU演算法用途之廣就不說了,凡是要用cache的地方都可以見到它的身影。特別是執行緒多,併發高,資料量大的環境下。
jdk1.5真好,在LinkedHashMap.java的原始碼中直接有這樣的字樣、“This kind of map is well-suited to building LRU caches.......The removeEldestEntry(Map.Entry) method may be overridden to impose a policy for removing stale mappings automatically when new mappings are added to the map.”
就是說自己寫一下removeEldestEntry就搞定了。
以下是程式碼,增加的是執行緒安全的程式碼
jdk1.5真好,在LinkedHashMap.java的原始碼中直接有這樣的字樣、“This kind of map is well-suited to building LRU caches.......The removeEldestEntry(Map.Entry) method may be overridden to impose a policy for removing stale mappings automatically when new mappings are added to the map.”
就是說自己寫一下removeEldestEntry就搞定了。
以下是程式碼,增加的是執行緒安全的程式碼
- import java.util.LinkedHashMap;
- import java.util.concurrent.locks.Lock;
- import java.util.concurrent.locks.ReentrantLock;
- public class LRULinkedHashMap<K, V> extends LinkedHashMap<K, V>
- {
- private final int maxCapacity;
- private static final float DEFAULT_LOAD_FACTOR = 0.75f;
- private final Lock lock = new ReentrantLock();
- public LRULinkedHashMap(int maxCapacity)
- {
- super(maxCapacity, DEFAULT_LOAD_FACTOR, true);
- this.maxCapacity = maxCapacity;
- }
- @Override
- protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest)
- {
- return size() > maxCapacity;
- }
- @Override
- public V get(Object key)
- {
- try {
- lock.lock();
- return super.get(key);
- }
- finally {
- lock.unlock();
- }
- }
- @Override
- public V put(K key, V value)
- {
- try {
- lock.lock();
- return super.put(key, value);
- }
- finally {
- lock.unlock();
- }
- }
- }
相關文章
- LRU cache快取簡單實現快取
- 資料結構系列之單連結串列實現一個簡單的LRU演算法資料結構演算法
- 實現最簡單的模板替換
- 使用rails實現最簡單的CRUDAI
- java實現簡單的JDBCJavaJDBC
- LRU演算法簡介演算法
- java實現棧的簡單操作Java
- 任務排程並行演算法的Java簡單實現並行演算法Java
- c#實現最簡單的socket通訊C#
- LRU 快取淘汰演算法的兩種實現快取演算法
- Java使用Netty實現簡單的RPCJavaNettyRPC
- JS 實現快取演算法(FIFO/LRU)JS快取演算法
- LeetCode146 動手實現LRU演算法LeetCode演算法
- LRU演算法四種實現方式介紹演算法
- Java Web簡單登陸功能的實現JavaWeb
- 使用Java實現簡單的鬥地主案例Java
- Java用UDP實現簡單聊天JavaUDP
- Laravel 使用者認證最簡單的實現 比 Jetstream 要簡單很多Laravel
- 實現一個簡單的輪詢演算法演算法
- 實現一個簡單的DOM diff演算法演算法
- 用最簡單的方法實現原生 JS 放大鏡特效JS特效
- 常見快取演算法和LRU的c++實現快取演算法C++
- 昨天面試被問到的 快取淘汰演算法FIFO、LRU、LFU及Java實現面試快取演算法Java
- Java實現簡單的增刪改查操作Java
- 簡單的Java實現Netty進行通訊JavaNetty
- Java實現一個簡單的計算器Java
- 簡單快遞系統 java實現Java
- 使用ABAP實現一個最簡單的區塊鏈原型區塊鏈原型
- 用java實現一個簡單的區塊鏈Java區塊鏈
- java實現一個簡單的爬蟲小程式Java爬蟲
- 用java實現一個簡單的計算器Java
- GFS(谷歌檔案系統)的JAVA簡單實現谷歌Java
- AOP的簡單實現
- 簡單的 HashMap 實現HashMap
- 實現簡單的BitMap
- ArrayList的簡單實現
- Java 簡單實現撲克牌抽象類Java抽象
- php+nginx實現最簡單的遠端呼叫rpc(微服務)PHPNginxRPC微服務
- 最簡單的C實現控制檯掃雷1+1=2