博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LRU算法的精简实现(基于Java)
阅读量:5929 次
发布时间:2019-06-19

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

LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。

import java.util.HashMap;import java.util.LinkedHashMap;import java.util.Map;public class Main {    static class LRULinkedHashMap
extends LinkedHashMap
{ //定义缓存的容量 private int capacity; //带参数的构造器 LRULinkedHashMap(int capacity){ //如果accessOrder为true的话,则会把访问过的元素放在链表后面,放置顺序是访问的顺序 //如果accessOrder为flase的话,则按插入顺序来遍历 super(16,0.75f,true); //传入指定的缓存最大容量 this.capacity=capacity; } //实现LRU的关键方法,如果map里面的元素个数大于了缓存最大容量,则删除链表的顶端元素 @Override public boolean removeEldestEntry(Map.Entry
eldest){ return size()>capacity; } } //test public static void main(String[] args) { LRULinkedHashMap
testCache = new LRULinkedHashMap<>(3); testCache.put("A", 1); testCache.put("B", 2); testCache.put("C", 3); System.out.println(testCache.get("B")); System.out.println(testCache.get("A")); testCache.put("D", 4); System.out.println(testCache.get("D")); System.out.println(testCache.get("C")); }}

API的使用:

  1. 首先是LinkedHashMap的构造器:
//如果accessOrder为true的话,则会把访问过的元素放在链表后面,放置顺序是访问的顺序public LinkedHashMap(int initialCapacity,                     float loadFactor,                     boolean accessOrder) {    super(initialCapacity, loadFactor);    this.accessOrder = accessOrder;}
  1. 重写removeEldestEntry方法
//removeEldestEntry方法会在afterNodeInsertion中调用//在每次put操作末尾会调用afterNodeInsertion方法。可以利用此方法删除链表的顶端元素。void afterNodeInsertion(boolean evict) { // possibly remove eldest    LinkedHashMap.Entry
first; if (evict && (first = head) != null && removeEldestEntry(first)) { K key = first.key; removeNode(hash(key), key, null, false, true); }}

转载于:https://www.cnblogs.com/keeya/p/9602691.html

你可能感兴趣的文章
linux下安装压缩解压程序7z命令及7z命令的使用
查看>>
容器技术介绍
查看>>
CCF NOI1069
查看>>
laravel5验证码
查看>>
Mac react环境搭建
查看>>
[Cpp primer] Namespace using Declarations
查看>>
图(个人复习专用)
查看>>
django ajax练习
查看>>
iis 配置域名访问
查看>>
C#串口通信实例
查看>>
TCP协议三次握手过程分析
查看>>
蓝桥杯 兰顿蚂蚁(Bfs)
查看>>
杭电1234--开门人和关门人
查看>>
杭电2029--Palindromes _easy version(回文串)
查看>>
redis的hash, list, set类型相关命令
查看>>
文件流之字节缓冲流(BufferedInputStream BufferedOutputStream)
查看>>
聪明的燕姿[JLOI2014]
查看>>
天鹅会面
查看>>
一个非科班出身程序员的成长历程
查看>>
图解Raid5数据存储的原理
查看>>