LeetCode LRU 缓存 LRU Cache

最近的热题,就是用LinkedHashMap。

老节点在最前,新节点在最后。

注意get时候也会更新节点。

set时候分两种情况,key在内和不在内。在内时删除旧pair,加入新pair。(不用考虑容量问题)

不在内时,要注意如果容量已经达到,则删除第一个再加入新pair


package Level4;

import java.util.LinkedHashMap;

/**
 * LRU Cache 
 * 
Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.

get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.
set(key, value) - Set or insert the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.
 *
 */
public class S149 {

	public static void main(String[] args) {
		LRUCache c = new LRUCache(1);
		c.set(2, 1);
		c.set(2, 2);
		System.out.println(c.get(2));
	}
	
	static class LRUCache {
	    
	    LinkedHashMap<Integer, Integer> map;
	    int capacity;
	    
	    public LRUCache(int capacity) {
	        map = new LinkedHashMap<Integer, Integer>(capacity);
	        this.capacity = capacity;
	    }
	    
	    public int get(int key) {
	        if(map.containsKey(key)){
	        	int val = map.get(key);
	        	map.remove(key);
	        	map.put(key, val);
	            return val;
	        }
	        return -1;
	    }
	    
	    public void set(int key, int value) {
	    	if(map.containsKey(key)){
	        	map.remove(key);
	        	map.put(key, value);
	        }else{
	        	if(map.size() == capacity){
	        		int firstKey = map.keySet().iterator().next();
		            map.remove(firstKey);
	        	}
	            map.put(key, value);
	        }
	    }
	}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值