//LinkedHashMap的一个构造函数,当参数accessOrder为true时,即会按照访问顺序排序,最近访问的放在最前,最早访问的放在后面
public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) {
super(initialCapacity, loadFactor);
this.accessOrder = accessOrder;
}

LRU是Least Recently Used 的缩写,翻译过来就是“最近最少使用”,LRU缓存就是使用这种原理实现,简单的说就是缓存一定量的数据,当超过设定的阈值时就把一些过期的数据删除掉,比如我们缓存10000条数据,当数据小于10000时可以随意添加,当超过10000时就需要把新的数据添加进来,同时要把过期数据删除,以确保我们最大缓存10000条,那怎么确定删除哪条过期数据呢,采用LRU算法实现的话就是将最老的数据删掉,Java版的LRU缓存实现就数linkedHashmap了

    LinkedHashMap<Integer, String> linkedHashMap = new LinkedHashMap<>(new CountingMapData(9));
print(linkedHashMap);
print("=====");
linkedHashMap = new LinkedHashMap<>(16, 0.75f, true);
linkedHashMap.putAll(new CountingMapData(9));
print(linkedHashMap); System.out.println("=====");
for (int i = 0; i < 6; i++) {
linkedHashMap.get(i);
}
print("--"+linkedHashMap);
linkedHashMap.get(0);
print("--"+linkedHashMap);
public class CountingMapData
extends AbstractMap<Integer,String> {
private int size;
private static String[] chars =
"A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
.split(" ");
public CountingMapData(int size) {
if(size < 0) this.size = 0;
this.size = size;
}
private static class Entry
implements Map.Entry<Integer,String> {
int index;
Entry(int index) { this.index = index; }
public boolean equals(Object o) {
return Integer.valueOf(index).equals(o);
}
public Integer getKey() { return index; }
public String getValue() {
return
chars[index % chars.length] +
Integer.toString(index / chars.length);
}
public String setValue(String value) {
throw new UnsupportedOperationException();
}
public int hashCode() {
return Integer.valueOf(index).hashCode();
}
}
public Set<Map.Entry<Integer,String>> entrySet() {
// LinkedHashSet retains initialization order:
Set<Map.Entry<Integer,String>> entries =
new LinkedHashSet<Map.Entry<Integer,String>>();
for(int i = 0; i < size; i++)
entries.add(new Entry(i));
return entries;
}
public static void main(String[] args) {
System.out.println(new CountingMapData(60));
}
}

输出:

{0=A0, 1=B0, 2=C0, 3=D0, 4=E0, 5=F0, 6=G0, 7=H0, 8=I0}
=====
{0=A0, 1=B0, 2=C0, 3=D0, 4=E0, 5=F0, 6=G0, 7=H0, 8=I0}
=====
--{6=G0, 7=H0, 8=I0, 0=A0, 1=B0, 2=C0, 3=D0, 4=E0, 5=F0}
--{6=G0, 7=H0, 8=I0, 1=B0, 2=C0, 3=D0, 4=E0, 5=F0, 0=A0}

最新文章

  1. 如何基于RabbitMQ实现优先级队列
  2. 三天学会HTML5 之第一天
  3. Web Api其中的PUT功能演示
  4. hibernate-聚合函数分组统计数据查询
  5. SunSonic 3.0 ORM开源框架的学习
  6. 网游中的网络编程3:在UDP上建立虚拟连接
  7. 配置SecureCRT连接本地虚拟机中的Linux系统
  8. android support Percent支持库开发
  9. js及jQuery实现checkbox的全选、反选和全不选
  10. linux系统相关的任务[fg、bg、jobs、&amp;、ctrl + z]
  11. pku,杨建武:文本挖掘技术
  12. Fantageek翻译系列之《使用Autolayout显示变化高度的UITableViewCell》
  13. perl 爬取某理财网站产品信息
  14. HttpGet和HttpPost的区别
  15. AJAX同步和异步的区别
  16. 并发库应用之七 &amp; 信号灯Semaphore应用
  17. 宝塔面板安装SSL证书
  18. 2198: 小P当志愿者送餐
  19. solr部署tomcat 访问HTTP Status 403 – Access to the requested resource has been denied
  20. js跳转页面(转)

热门文章

  1. 20200416_Centos 7.2 在安装系统之前把数据备份出来
  2. 对称加密之---AES加密
  3. 第14.4节 使用IE浏览器获取网站访问的http信息
  4. python 练习洗牌
  5. LeetCode初级算法之数组:122 买卖股票的最佳时机 II
  6. sort by背后使用了什么排序算法
  7. Linux相关知识基础
  8. Sense Sense (Beta)安装及解决部分Chrome插件安装时程序包无效:&quot;CRX_HEADER_INVALID&quot;
  9. 在win7下安装texlive
  10. 2020.12.16 模拟赛x+1