使用双向链表+map,实现O(1)时间内的get和set
需要注意的是:
1. set时更新tail
size为0时更新头部
size为capacity时删除头部并且更新头部
2. get时更新节点到tail的位置,同时如果是节点是头部的话要更新头部
附上代码:
class LRUCache{
struct Node{
int key;
int...
分类:
其他好文 时间:
2014-10-08 01:04:54
阅读次数:
274
可以想象的出,不规则的瀑布照片墙是ScrollView内嵌一个横向的LinearLayout再内嵌三个纵向的LinearLayout。
如果不停地往LinearLayout里添加图片,程序很快就会OOM。因此我们还需要一个合理的方案来对图片资源进行释放,这里仍然是准备使用LruCache算法
TravlesFragment:
package com.francis.changtrav...
分类:
移动开发 时间:
2014-10-04 18:49:36
阅读次数:
321
一.LruCache的简单介绍Cache保存一个强引用来限制内容数量,每当Item被访问的时候,此Item就会移动到队列的头部。* 当cache已满的时候加入新的item时,在队列尾部的item会被回收。*如果你cache的某个值需要明确释放,重写entryRemoved()*如果key相对应的it...
分类:
其他好文 时间:
2014-09-23 12:07:54
阅读次数:
196
腾讯笔试题,设计内存池,alloc和free都是O(1)。和LRUCache类似,这里用了一个list表示可用的空间,用一个map来记录这块内存是否已分配,这样free的时候才可能O(1)。 1 class MemPool { 2 public: 3 void init(in...
分类:
其他好文 时间:
2014-09-22 23:29:03
阅读次数:
140
内存缓存(LruCache):系统提供的LruCache类是非常适合用作缓存Bitmap任务的,它将最近被引用到的对象存储在一个强引用的LinkedHashMap中,并且在缓存超过了指定大小之后将最近不常使用的对象释放掉。注意:以前有一个非常流行的内存缓存实现是SoftReference(软引用)或...
分类:
其他好文 时间:
2014-09-05 17:47:21
阅读次数:
204
照片墙的实现,是需要往手机里面添加很多图片的,如果没有对资源进行合理的释放,程序很快就会出现OOM.所以需要用到LruCache算法来缓存图片.1,首先是图片资源类,这个类中包含了很多图片链接. publicclassAllImages{ publicfinalstaticString[]image...
分类:
移动开发 时间:
2014-09-04 23:33:50
阅读次数:
417
hash+双向链表#include #include #include #include using namespace std;class LRUCache{public: LRUCache(int capacity) { m_capacity = capacity ;...
分类:
其他好文 时间:
2014-09-02 11:57:04
阅读次数:
170
Android用LruCache来取代原来强引用和软引用实现内存缓存,因为据说自2.3以后Android将更频繁的调用GC,导致软引用缓存的数据极易被释放。
LruCache使用一个LinkedHashMap简单的实现内存的缓存,没有软引用,都是强引用。如果添加的数据大于设置的最大值,就删除最先缓存的数据来调整内存。他的主要原理在trimToSize方法中。需要了解两个主要的变量size和...
分类:
其他好文 时间:
2014-08-31 00:30:30
阅读次数:
237
1 class LRUCache{ 2 public: 3 LRUCache(int capacity) { 4 size = capacity; 5 } 6 int get(int key) { 7 if(cacheMap.find(key...
分类:
其他好文 时间:
2014-08-30 16:23:09
阅读次数:
206
加载图片,图片如果达到一定的上限,如果没有一种合理的机制对图片进行释放必然会引起程序的崩溃.为了避免这种情况,我们可以使用Android中LruCache来缓存下载的图片,防止程序出现OOM.打开activity_main.xml作为程序的主布局,加入如下代码: 接着我们定义GridView中每一....
分类:
移动开发 时间:
2014-08-22 00:10:05
阅读次数:
410