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

本文共 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

你可能感兴趣的文章
201621123075 Week02-Java基本语法与类库
查看>>
天堂图片网图片下载
查看>>
【UIKit】UITableView 6 编辑模式
查看>>
XPath手册 [源于ZVON]
查看>>
poj2528
查看>>
FortiGate软件版本升级
查看>>
spring boot 配置文件语法
查看>>
Eclipse中将java类打成jar包形式运行
查看>>
是否需要有代码规范
查看>>
.NET跨平台实践:用C#开发Linux守护进程
查看>>
大数据量分页优化
查看>>
office2007安装时,提示找不到Office.zh-cn下的OfficeMUI.msi解决方法
查看>>
XED中文亂碼
查看>>
window - BOM对象
查看>>
servlet:启动的时机
查看>>
笔记:2016-06-23
查看>>
5.22心得
查看>>
你赚的钱大部分来自你的圈子,而非你的知识
查看>>
字符串递归
查看>>
OS X Yosemite Beta体验
查看>>