mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
修复LRUCache移除事件监听失效
This commit is contained in:
@@ -1,21 +1,28 @@
|
||||
package cn.hutool.core.map;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* 固定大小的{@link LinkedHashMap} 实现<br>
|
||||
* 注意此类非线程安全,由于{@link #get(Object)}操作会修改链表的顺序结构,因此也不可以使用读写锁。
|
||||
*
|
||||
* @author looly
|
||||
*
|
||||
* @param <K> 键类型
|
||||
* @param <V> 值类型
|
||||
* @author looly
|
||||
*/
|
||||
public class FixedLinkedHashMap<K, V> extends LinkedHashMap<K, V> {
|
||||
private static final long serialVersionUID = -629171177321416095L;
|
||||
|
||||
/** 容量,超过此容量自动删除末尾元素 */
|
||||
/**
|
||||
* 容量,超过此容量自动删除末尾元素
|
||||
*/
|
||||
private int capacity;
|
||||
/**
|
||||
* 移除监听
|
||||
*/
|
||||
private Consumer<Map.Entry<K, V>> removeListener;
|
||||
|
||||
/**
|
||||
* 构造
|
||||
@@ -45,10 +52,26 @@ public class FixedLinkedHashMap<K, V> extends LinkedHashMap<K, V> {
|
||||
this.capacity = capacity;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置自定义移除监听
|
||||
*
|
||||
* @param removeListener 移除监听
|
||||
*/
|
||||
public void setRemoveListener(final Consumer<Map.Entry<K, V>> removeListener) {
|
||||
this.removeListener = removeListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) {
|
||||
//当链表元素大于容量时,移除最老(最久未被使用)的元素
|
||||
return size() > this.capacity;
|
||||
if (size() > this.capacity) {
|
||||
if (null != removeListener) {
|
||||
// 自定义监听
|
||||
removeListener.accept(eldest);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user