最簡單的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();
- }
- }
- }
相關文章
- 用go 簡單實現的LRUGo
- LRU Cache 的簡單 C++ 實現C++
- LRU cache快取簡單實現快取
- Java實現最簡單的RPC框架JavaRPC框架
- LRU演算法簡單例子演算法單例
- Java 自定義實現 LRU 快取演算法Java快取演算法
- 資料結構系列之單連結串列實現一個簡單的LRU演算法資料結構演算法
- LRU快取實現(Java)快取Java
- Blowfish 加密演算法 Java 版簡單實現加密演算法Java
- 使用rails實現最簡單的CRUDAI
- 實現最簡單的模板替換
- 資料庫的最簡單實現資料庫
- java實現簡單的JDBCJavaJDBC
- A*演算法的簡單實現薦演算法
- LRU演算法簡介演算法
- java實現棧的簡單操作Java
- java實現簡單的單點登入Java
- 任務排程並行演算法的Java簡單實現並行演算法Java
- tensorflowrnn最簡單實現程式碼RNN
- c#實現最簡單的socket通訊C#
- 最簡單的web伺服器實現(一)Web伺服器
- UICollectionView(二)實現一個最簡單的UICollectionViewUIView
- 如何最簡單的實現分散式快取分散式快取
- JS 實現快取演算法(FIFO/LRU)JS快取演算法
- LRU 快取淘汰演算法的兩種實現快取演算法
- Java實現一個簡單的BitArrayJava
- PHP實現最簡單的聊天室應用PHP
- 自己實現一個最簡單的資料庫資料庫
- LRU演算法四種實現方式介紹演算法
- 幾種簡單的負載均衡演算法及其Java程式碼實現負載演算法Java
- Java用UDP實現簡單聊天JavaUDP
- 使用Java實現簡單的鬥地主案例Java
- Java Web簡單登陸功能的實現JavaWeb
- Laravel 使用者認證最簡單的實現 比 Jetstream 要簡單很多Laravel
- 昨天面試被問到的 快取淘汰演算法FIFO、LRU、LFU及Java實現面試快取演算法Java
- 用最簡單的方法實現原生 JS 放大鏡特效JS特效
- 原生JS實現最簡單的圖片懶載入JS
- 原生 JS 實現最簡單的圖片懶載入JS