java限制HashMap大小,并实现LRU算法

有时候需要往一个MAP中写入一些记录,但又怕无限制地写入会导致内存爆掉,所以得限制这个MAP的大小。

实现:LinkedHashMap提供了简单的方法。

首先,定义一个最大数,比如1000,然后new LinkedHashMap的时候,重写一下removeEldestEntry()方法:

int maximumSize = 1000;
LinkedHashMap<K, String> myMap= new LinkedHashMap<K, String>() {
  private static final long serialVersionUID = 1L;
  @Override
  protected boolean removeEldestEntry(Map.Entry<K, String> eldest) {
    return size() > maximumSize;
  }
};

这样,每当调用myMap.put()的时候,就会自动判断是否个数已经超过maximumSize,如果超过就删掉最旧的那条(相当于是FIFO算法)。

除了自定义实现外,google的com.googlecode.concurrentlinkedhashmap实现了LinkedHashMap的LRU算法,因此实际中我们一般也不会重新造轮子。

相关源码的解析可以参见https://www.cnblogs.com/mengheng/p/3683137.html,该文章应该是基于jdk 1.7的,反正不是1.8,链表算法和数据结构基础好的话,还是挺好理解的。

posted @   zhjh256  阅读(1640)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2017-01-25 c++正则表达式
2017-01-25 c++回调函数
2017-01-25 第一个c++泛型函数(即模板)
2017-01-25 c/c++中类似于java jprofiler/eclispe memoryanalysis的代码性能瓶颈以及内存泄露分析工具
2017-01-25 vc++之stdafx.h
2017-01-25 c++中对应java ShutdownHook的退出处理器
2017-01-25 nginx负载均衡技术的优缺点
点击右上角即可分享
微信分享提示