LRU缓存策略

描述:

为最近最少使用(LRU)缓存策略设计一个数据结构,它应该支持以下操作:获取数据(get)和写入数据(set)。

获取数据get(key):如果缓存中存在key,则获取其数据值(通常是正数),否则返回-1。

写入数据set(key, value):如果key还没有在缓存中,则写入其数据值。当缓存达到上限,它应该在写入新数据之前删除最近最少使用的数据用来腾出空闲位置。

第一次提交:编译警告

Solution.java:36: error: cannot find symbol
return map.get(key).val;
^
symbol: variable val
location: class Solution.Node
Solution.java:49: error: cannot find symbol
map.get(key).val = value;
^
symbol: variable val
location: class Solution.Node
2 errors

第二次提交:同上。

第三次提交:class Node 中属性为value,然而class Node 的构造方法中用的却是 this.val = val

第四次提交:Ac

面对这道题时没有思路,主要参考这个帖子 http://blog.csdn.net/zsjmfy/article/details/53404608。

采用双向链表存储结点,结点中包含键值和指向前驱节点和后继结点的引用;map中存储 key 和 结点,通过map.get(key)确定结点位置,所有最近被访问的结点放在链表尾部。

时间: 2024-08-09 02:05:54

LRU缓存策略的相关文章

基于Alluxio内存文件系统的缓存策略

Alluxio是一种基于内存的分布式文件系统,支持不同的缓存替换策略,来替换内存中的文件快.Alluxio中的文件时以文件块形式组织,其中文件通过自己实现的inode数据结构记录文件属性并索引. 下面首先介绍几种不同的缓存策略,这些缓存策略被广泛的应用在web,数据库,文件系统中. 1 基于访问频率的缓存策略 这种缓存策略是根据缓存单位的(在Alluxio中是文件块Block)访问频率来进行缓存调度,最常用的策略是LFU(Least Frequently Used)策略.该策略每次淘汰访问频率最

网络图片的获取以及二级缓存策略(Volley框架+内存LruCache+磁盘DiskLruCache)

在开发安卓应用中避免不了要使用到网络图片,获取网络图片很简单,但是需要付出一定的代价——流量.对于少数的图片而言问题不大,但如果手机应用中包含大量的图片,这势必会耗费用户的一定流量,如果我们不加以处理,每次打开应用都去网络获取图片,那么用户可就不乐意了,这里的处理就是指今天要讲的缓存策略(缓存层分为三层:内存层,磁盘层,网络层). 关于缓存层的工作,当我们第一次打开应用获取图片时,先到网络去下载图片,然后依次存入内存缓存,磁盘缓存,当我们再一次需要用到刚才下载的这张图片时,就不需要再重复的到网络

Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解

本篇文章继续为大家介绍Universal-Image-Loader这个开源的图片加载框架,介绍的是图片缓存策略方面的,如果大家对这个开源框架的使用还不了解,大家可以看看我之前写的一篇文章Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用,我们一般去加载大量的图片的时候,都会做缓存策略,缓存又分为内存缓存和硬盘缓存,我之前也写了几篇异步加载大量图片的文章,使用的内存缓存是LruCache这个类,LRU是Least Recently Used 近

浅谈mysql innodb缓存策略

浅谈mysql innodb缓存策略: The InnoDB Buffer Pool Innodb 持有一个存储区域叫做buffer pool是为了在内存中缓存数据和索引,知道innodb bufferpool怎么工作,和利用它读取频繁访问的数据,是mysql优化重要的方面. 理想状况下,把bufferpool的大小调整到足够大,留下足够的内存空间给其他该服务器上的进程(使其无缺页即可).bufferpool越大,innodb 月表现为内存型数据库,从硬盘上一次读取数据,之后并成了从内存中读取数

本地应用缓存算法和缓存策略的介绍

特别声明:该文章是 本人在网上搜索到的一些资料,稍作整理而成的,还望大家不要误会,具体出自于那本人也已经忘记.还请大家不要误会!!!   通过设计良好的数据分块.预取.替换.更新等算法来提高对缓存内容的命中率和一致性. 1)数据分块      Memcached默认情况下采用了名为Slab Allocator的机制分配.管理内存.在该机制出现以前,内存的分配是通过对所有记录简单地进行malloc和free来进行的.但是,这种方式会导致内存碎片,加重操作系统内存管理器的负担,最坏的情况下,会导致操

缓存Memcached以及缓存策略

1.什么是memcached 缓存是一种常驻与内存的内存数据库,内存的读取速度远远快于程序在磁盘读取数据的速度.我们在设计程序的时候常常会考虑使用缓存,将经常访问的数据放到内存上面这样可以提高访问数据的速度,同时可以降低磁盘或数据库的压力. memcached就是一款可以方便实现缓存的工具软件,memcached的优势在于以下几点: 1.实现分布式缓存(支持热部署),通过hashcode根据缓存服务器ip智能分配将数据缓存到的服务器上. 2.实现最近最少访问的数据优先被移除缓存. 3.快速找到适

说说Android LRU缓存算法实现笔记(二)--LRU的应用

上一篇文章说说Android LRU缓存算法实现学习笔记(一) 中我们介绍了最常用的实现LRU缓存的数据结构LinkedHashMap,这一节我们会针对LinkedHashMap的数据结构的特性,来自己实现缓存结构和学习Android源码和项目中对缓存的完善. 上一篇说到对于缓存实现,我们很重要的会考虑以下几点:1.访问速度:2.逐出旧的缓存策略:3.最好还能考虑到一定的并发度.LinkedHashMap对哈希表的实现保证了我们缓存的快速访问速度,我们通过源码知道,LinkedHashMap默认

说说Android LRU缓存算法实现学习笔记(一)

在我们的手机应用开发时候,我们经常会遇到大数据访问的时候,我们通常会考虑以下几个方面的情况.一.手机内存的限制还必须保证应用反应的流畅:二.尽量小的流量消耗,不然,你的应用流畅度再好体验再好,用户还是会毫不犹豫的卸载掉你的应用.大数据量访问的情况下,数据缓存是我们一定会考虑到的解决方案.而作为缓存,我们很重要的会考虑以下几点:1.访问速度:2.逐出旧的缓存策略:3.最好还能考虑到一定的并发度.这篇我们主要说说LRU策略的缓存算法实现,我们就用图片缓存为例来谈谈Android应用开发中的缓存实现.

AsyncTask异步任务与LruCache缓存策略实现图片加载(一)

AsyncTask异步任务与LruCache缓存策略实现图片加载 AsyncTask异步任务 以下内容节选自官方文档: AsyncTask enables proper and easy use of the UI thread. This class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or ha