Files
CustomNPC-Plus/src/main/java/noppes/npcs/util/CacheHashMap.java
T

50 lines
1.3 KiB
Java
Raw Normal View History

2023-05-30 23:41:37 -05:00
package noppes.npcs.util;
import java.util.*;
public class CacheHashMap<K, V extends CacheHashMap.CachedObject<?>> extends HashMap<K, V> {
private final long maxCacheTime;
public CacheHashMap(long maxCacheTime) {
this.maxCacheTime = maxCacheTime;
}
@Override
public V get(Object key) {
V object = super.get(key);
object.updateTimeAccessed();
Iterator<Map.Entry<K,V>> iterator = this.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<K,V> entry = iterator.next();
long timeDiff = entry.getValue().timeSinceAccessed();
if (timeDiff > this.maxCacheTime) {
iterator.remove();
}
}
2023-05-30 23:41:37 -05:00
return object;
}
public static class CachedObject<T> {
private long lastTimeAccessed;
private final T object;
public CachedObject(T object) {
this.object = object;
this.lastTimeAccessed = System.currentTimeMillis();
}
public long timeSinceAccessed() {
return System.currentTimeMillis() - this.lastTimeAccessed;
}
public void updateTimeAccessed() {
this.lastTimeAccessed = System.currentTimeMillis();
}
public T getObject() {
return this.object;
}
}
}