我需要一个数据结构,以支持最长时间前请求的项目的最有效的启动策略.例如,我有一堆不时要求的物品.当我内存不足时,我想踢出我数据结构中最古老的项目(哈希映射).

我在想像Queue这样的FIFO ds,但我不知道如何处理这种情况:

–> a b c d a –>

a是最古老和最新的项目.如果再次添加“a”,我需要搜索整个队列来删除它.这是非常低效的,但我想不出任何有效的方法.也许是某种树形结构,将最少访问的树结构保持在顶部?

Java中是否有任何这种数据结构的实现?

解决方法:

LinkedHashMap是您追求的结构.从the docs开始:

A special constructor is provided to create a linked hash map whose order of iteration is the order in which its entries were last accessed, from least-recently accessed to most-recently (access-order). This kind of map is well-suited to building LRU caches.

Map map = new LinkedHashMap<>(CAPACITY, LOAD_FACTOR, true);

boolean参数确定映射是访问顺序还是插入顺序. true表示访问顺序.

此外,如果您希望地图作为LRU缓存工作,您可以创建自己的类来扩展LinkedHashMap并覆盖removeEldestEntry方法.再次,从文档:

The removeEldestEntry(Map.Entry) method may be overridden to impose a policy for removing stale mappings automatically when new mappings are added to the map.

这意味着您可以为缓存创建自己的类:

public class Cache extends LinkedHashMap {

private static final int MAX_ENTRIES = 100;

public Cache() {

super(SOME_INITIAL_CAPACITY, SOME_LOAD_FACTOR, true);

}

protected boolean removeEldestEntry(Entry entry) {

return size() > MAX_ENTRIES;

}

}

用法:

Map map = new Cache<>();

标签:java,data-structures

来源: https://codeday.me/bug/20190827/1746084.html

java数据访问策略_java – 支持基于最近访问过的项目的高效启动策略的数据结构...相关推荐

  1. java数据同步处理_Java如何处理多线程的数据同步问题

    在这里写这种文章好奇怪,先用作笔记吧 Java中有如下的方法来处理代码块的并发访问问题: 一是关键字synchronized 二是加锁(锁对象,条件对象) Java给每一个对象都提供了一个内部锁,在方 ...

  2. java类默认访问权限_Java的四种访问权限

    ❝ 所谓访问权限,指的就是本类中的成员变量.成员方法对其他类的可见性 ❞ 试想一想,当我们修改一个非常庞大的项目时,如果所有变量和方法都是公共权限,那么后端中任何类都有权限去修改它的变量和方法,很有可 ...

  3. java 权限修饰符_java中4种访问权限修饰符

    在Java编程语言中有四种权限访问控制符,这四种访问权限的控制符能够控制类中成员的可见性. 一.public (1) 定义:public是公共的,被public所修饰的成员可以在任何类中都能被访问到. ...

  4. java后台接收数据格式_Java后台基于POST获取JSON格式数据

    1.直接使用request.getParamater()的方法获取(这种取参方式对于POST和GET的提交方式均适用): 2.通过请求体的IO流获取参数(这种方式只能用于POST,因为GET方式没有请 ...

  5. java tcp 编程实例_Java实现基于TCP的通讯程序实例解析

    Java中的TCP通信程序 TCP可以实现两台计算机之间的数据交互通信的两端,要严格区分客户端与服务端 两端通信时的步骤: 1.服务端程序,需要事先启动,等待客户端连接 2.客户端主动连接服务器端,才 ...

  6. java克鲁斯卡尔算法_Java语言基于无向有权图实现克鲁斯卡尔算法代码示例

    所谓有权图,就是图中的每一条边上都会有相应的一个或一组值.通常情况下,这个值只是一个数字 如:在交通运输网中,边上的权值可能表示的是路程,也可能表示的是运输费用(显然二者都是数字).不过,边上的权值也 ...

  7. java 数据保存内存_java中的各种数据类型在内存中存储的方式 一

    1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对 ...

  8. java tcp聊天程序_java实现基于Tcp的socket聊天程序

    对于步入编程行业不深的初学者或是已经有所领会的人来说,当学习一项新的技术的时候,非常渴望有一个附上注释完整的Demo.本人深有体会,网上的例子多到是很多,但是很杂不完整,写代码这种东西来不得半点马虎, ...

  9. java 数据容器 有序_java容器-全览

    1.Collection全览-非线程安全的实现类 接口简介 Iterable:迭代器接口,用于遍历数据.foreach或者iterator. Collection:集合,java容器大部分集合的父类接 ...

最新文章

  1. 团队项目第一阶段冲刺站立会议1(4月18日)
  2. 鸿蒙投屏和普通投屏,华为智慧屏SE发布:预装鸿蒙 可一碰投屏
  3. boost::math::non_central_chi_squared用法的测试程序
  4. java数组中相同的元素个数_java求两个数组中相同元素出现的次数
  5. c语言程序定义不知数量的一维数组,c语言程序设计10-第6章 利用数组处理批量数据 6.1 怎样定义和引用一维数组.ppt...
  6. HTTP 协议(详解)
  7. 阿里专家常昊:新人如何上手项目管理?
  8. InsertSort -- 插入排序
  9. APIO2010巡逻(树上带权直径)
  10. mysql主从-读写分离
  11. Asp.Net Core基于JWT认证的数据接口网关Demo
  12. 浏览器禁用Cookie,基于Cookie的会话跟踪机制失效的解决的方法
  13. Unity跨iOS、Android平台使用protobuf-net的方法
  14. 常见报错_mysql常见报错之SELECT list is not in GROUP BY clause
  15. 基于matlab的锁相环频率合成器,基于simulink的电荷泵锁相环频率合成器建模与仿真.pdf...
  16. Mac M1运行matlab卡,解决办法
  17. MATLAB绘制散点图
  18. 三菱PLC与上位机进行通讯
  19. 【Visual C++】游戏开发笔记之六——游戏画面绘图(三)透明特效的制作方法
  20. 基于springboot的在线心理测评系统

热门文章

  1. 5、C语言面试笔试--数据组织--数组
  2. verilog基础篇RAM IP核的使用
  3. 真实实验测试多少节电池可以点亮白炽灯泡!
  4. 【预告】新房装修网络规划网络布局学习笔记,家庭网络需求文章内容及结构...
  5. 【体验】ESP32-CAM可能是最便宜的“监控”方案,ESP32-CAM程序下载调试
  6. zynq 文件系统中加载PL fpga.bit笔记
  7. SVN 常用操作命令 使用笔记
  8. windows环境下安装scrapy框架报错问题--最快捷有效的解决方案
  9. 在多台机器上搭建Hadoop的分布式环境
  10. [转]ASP.NET中使用UpdatePanel实现局部异步刷新方法和攻略