代码实现一个Lrucache

/**伪代码实现一个lru缓存 关键  1、linkedhashmap 2、超时时间 value值要包装成一个 包含 过期时间的对象  3、*/


class BlockingLinkedHashmap<k, v> implemnts LinkedHashMap<k, v>{
	private ReentrantLock lock;


	private v get(k key){
		try{
			lock.lock();
			return super.get(key);
		}finally{
			lock.unlock();
		}

	}

	//下面省略好多getset 主要是加个lock


}

class ValueWrapper<v>{
	private v value;

	private long timeout;

	private Date c;

	public ValueWrapper(v value){

	}

	public ValueWrapper(v value, long tiemout){
		this.value = value;
		this.timeout = time;
		this.updateTime = new Date();
	}

	public v getValue(){
		if(timeout !=null ){
			Date now = new Date();
			updateTime = now;
			if(now.getTime - updateTime > timeout){
				return null;
			}
		}
		return v;
	}
}


class LruCache<k, v>{
 
 private  BlockingLinkedHashmap<k, v> map ;
	
	init(){
	map = new BlockingLinkedHashmap();

	}


	public void set(k key, v value, long timeout){
		map.put(key, new ValueWrapper<v>(value, timeout));
	}



	public void set(k key, v value){
		map.put(key, new ValueWrapper<v>(value));
	}

	public v get(k key){
	ValueWrapper<v> valueWrapper;
	valueWrapper = map.remove(key);
		if(valueWrapper == null){
			return null;
		}else{
			return valueWrapper.getValue();
		}

	}


}

 

posted @ 2020-06-17 14:40  saveworld_niub  阅读(220)  评论(0编辑  收藏  举报