基于LinedHashMap 实现LRUCache 缓存

原文链接 基于LinedHashMap 实现LRUCache 缓存

  • 基于LinkedHashMap实现LRUCache
public class LRUCache2<K, V> extends LinkedHashMap {

  private int size;

  private HashMap<K, V> map;

  public LRUCache2(int size) {
    this.size = size;
    this.map =
        new LinkedHashMap<K, V>(size, 0.75f, true) {
          @Override
          protected boolean removeEldestEntry(Map.Entry eldest) {
            return size() > size;
          }
        };
  }

  public V getValue(K key) {
    if (this.map.containsKey(key)) {
      return this.map.get(key);
    } else {
      return null;
    }
  }

  public void set(K key, V value) {
    this.map.put(key, value);
  }

  public void print() {
    this.map.forEach((k, v) -> System.out.println(k + "\t" + v));
  }
}
  • 测试案例
public class LRUCacheDemo {

  public static void main(String[] args) {
    LRUCache2<Integer, String> cache = new LRUCache2(3);
    cache.set(1, "One");
    cache.set(2, "Two");
    cache.set(3, "Three");
    cache.print();
    System.out.println("----------------------");
    // 尝试获取,提高1和3的使用率
    cache.getValue(1);
    cache.getValue(3);
    cache.getValue(3);
    // 容器已经满了,插入4的时候会覆盖最少使用的为2
    cache.set(4, "Four");
    cache.print();
  }
}

原文地址:https://www.cnblogs.com/zhoutao825638/p/10660316.html

时间: 2024-08-27 10:47:14

基于LinedHashMap 实现LRUCache 缓存的相关文章

使用Android新式LruCache缓存图片,基于线程池异步加载图片

import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import a

基于maven插件的缓存控制插件

asset-cache-control github源码及下载地址: https://github.com/StruggleBird/asset-cache-control 基于maven插件的缓存控制工具,通过修改资源url的请求参数,比如在url后面添加版本号或者时间戳的形式,来有效的防止浏览器缓存. 目前该功能可用于避免js.css.image 三种文件类型缓存 用法: 1.添加插件asset-cache-control 到pom文件中: <build> <plugins>

android 使用LruCache缓存网络图片

加载图片,图片如果达到一定的上限,如果没有一种合理的机制对图片进行释放必然会引起程序的崩溃. 为了避免这种情况,我们可以使用Android中LruCache来缓存下载的图片,防止程序出现OOM. 打开activity_main.xml作为程序的主布局,加入如下代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.an

基于LinkedHashMap实现LRU缓存调度算法原理

引言 本文就 <基于LinkedHashMap实现LRU缓存调度算法原理及应用 >一文作为材料,记录一些常见问题,备忘. 延伸出两道常见的Java面试题: 插入Entry节点到table表的链表中时,Hashmap 和LinkedHashmap使用头茶法还是尾茶法?遍历map的时候,Entry.Entryset()获取的set集合,是按照从头到尾还是从尾到头的顺序存储的? 实现LRU算法最合适的数据结构? 如果读者可以打出来,不用继续看下边的资料了.初学者请继续阅读.相信你读完之后可以找到问题

memcached基于socket访问memcache缓存服务器

memcached基于socket访问memcache缓存服务器 操作memcache常用三种方法: 1.memcache基于php_memcache.dll扩展(php扩展) 2.memcached基于php_memcached.dll扩展(php扩展) 3.memcached基于socket访问(基于网络) memcached-client.php 调用很简单,调用方法如下: <?php header("content-type:text/html; charset=utf-8&quo

实现一个基于WCF的分布式缓存系统

前言: 用到分布式的东西很多了,一直想做一个简单的分布式小项目练练手学习下.后来决定来一个简单的分布式缓存的系统. 在企业应用开发中缓存的用例不胜枚举,但是每次更多的是单机的部署与使用,没有对应的需求是一个原因,另一个原因总是好高骛远做过的总是不想再进行修正. 这次的分布式就从最简单的分布式缓存开始.说简单是因为没有实现分布式缓存高深的寻址,或者对备份处理的牛X实现.只是实现了“分布”这个目的,不足之处还请大家指导. 分布的实现方式有哪些? 既然做“分布”,当然要看看主流的“分布”实现方式.小弟

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

让App中加入LruCache缓存,轻松解决图片过多造成的OOM

上次有过电话面试中问到Android中的缓存策略,当时模糊不清的回答,现在好好理一下吧. Android中一般情况下采取的缓存策略是使用二级缓存,即内存缓存+硬盘缓存->LruCache+DiskLruCache,二级缓存可以满足大部分的需求了,另外还有个三级缓存(内存缓存+硬盘缓存+网络缓存),其中DiskLruCache就是硬盘缓存,下篇再讲吧! 1.那么LruCache到底是什么呢? 查了下官方资料,是这样定义的: LruCache 是对限定数量的缓存对象持有强引用的缓存,每一次缓存对象被

分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!

using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Caching; using System.Text; using System.Threading.Tasks; namespace AutoLogisticsPH.Common.Utils { /// <summary> /// 基于MemoryCache(内存缓存)的缓存工具类 /// Author:左文俊 ///