博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LRUCache
阅读量:4072 次
发布时间:2019-05-25

本文共 1521 字,大约阅读时间需要 5 分钟。

要求:
设计并实现一个LRU缓存的数据结构,支持get和set操作
capacity 缓存数量

get(key):若缓存中存在key,返回对应的value,否则返回-1

set(key,value):若缓存中存在key,替换其value,否则插入key及其value,如果插入时缓存已经满了,应该使用LRU算法把最近最久没有使用的key踢出缓存。

package test;import java.util.LinkedHashMap;import java.util.Map;import java.util.Scanner;public class LRUCache {	    private int capacity;    private Map
cache; public LRUCache(final int capacity) { this.capacity = capacity; this.cache = new LinkedHashMap
(capacity, 0.75f, true) { // 定义put后的移除规则,大于容量就删除eldest protected boolean removeEldestEntry(Map.Entry
eldest) { return size() > capacity; } }; } public int get(int key) { if (cache.containsKey(key)) { return cache.get(key); } else return -1; } public void set(int key, int value) { cache.put(key, value); } public static void main(String[] args) { Scanner scan = new Scanner(System.in); int c = scan.nextInt(); LRUCache l = new LRUCache(c); String s =scan.nextLine(); while(scan.hasNext()){ s = scan.nextLine(); String[] s1 = s.split(" "); int key = Integer.parseInt(s1[0]); if(s1.length ==2){ int value= Integer.parseInt(s1[1]); l.set(key, value); }else if(s1.length ==1){ System.out.println(l.get(key)); } } }}
1. 构造函数参数:0.75表示hashmap数量达到0.75比重时,扩容2倍;true表示链表顺序是访问顺序。
2. removeEldestEntry方法,回收策略的重写方法。
输入

3

100 100

200 200

300 300

100 100

400 400

100

200

300

500

输出

100

-1

300

-1

转载地址:http://nkkni.baihongyu.com/

你可能感兴趣的文章
媒体广告业如何运用云盘提升效率
查看>>
IOS开发的开源库
查看>>
Jenkins - sonarqube 代码审查
查看>>
Jenkins + Docker + SpringCloud 微服务持续集成(一)
查看>>
Jenkins + Docker + SpringCloud 微服务持续集成 - 单机部署(二)
查看>>
Jenkins + Docker + SpringCloud 微服务持续集成 - 高可用集群部署(三)
查看>>
Linux 粘滞位 suid sgid
查看>>
C#控件集DotNetBar安装及破解
查看>>
Winform皮肤控件IrisSkin4.dll使用
查看>>
Winform多线程
查看>>
C# 托管与非托管
查看>>
Node.js中的事件驱动编程详解
查看>>
mongodb管理与安全认证
查看>>
nodejs内存控制
查看>>
nodejs Stream使用中的陷阱
查看>>
MongoDB 数据文件备份与恢复
查看>>
MongoDB数据库插入、更新和删除操作详解
查看>>
MongoDB文档(Document)全局唯一ID的设计思路
查看>>
mongoDB简介
查看>>
Redis持久化存储(AOF与RDB两种模式)
查看>>