本文实例讲述了java LRU算法介绍与用法。分享给大家供大家参考,具体如下:1.前言在用户使用联网的软件的时候,总会从网络上获取数据,当在一段时间内要多次使用同一个数据的时候,用户不可能每次用的时候都去联网进行请求,既浪费时间又浪费网络这
本文实例讲述了java LRU算法介绍与用法。分享给大家供大家参考,具体如下:
1.前言
在用户使用联网的软件的时候,总会从网络上获取数据,当在一段时间内要多次使用同一个数据的时候,用户不可能每次用的时候都去联网进行请求,既浪费时间又浪费网络
这时就可以将用户请求过的数据进行保存,但不是任意数据都进行保存,这样会造成内存浪费的。LRU算法的思想就可以运用了。
2.LRU简介
LRU是Least Recently Used 近期最少使用算法,它就可以将长时间没有被利用的数据进行删除。
LRU在人们一些情感中也体现的得很好的。当你和一群朋友接触的时候,经常联系的人关系是很好的,若很久没有联系到最后估计都不会再有联系了,也就会是失去这位朋友了。
3.下面通过代码展现LRU算法:
最简单的一种方法是利用LinkHashMap,因为它本身就有一个方法就是在所设置的缓存范围内,去除掉额外的旧数据
public class LRUByHashMap<K, V> { private int cacheSize; private int currentSize; private LinkedHashMap<K, V> maps; public LRUByHashMap(int cacheSize1) { this.cacheSize = cacheSize1; maps = new LinkedHashMap<K, V>() { private static final long serialVersionUID = 1; // 这里移除旧的缓存数据 @Override protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) { // 当超过缓存数量的时候就将旧的数据移除 return getCurrentSize() > LRUByHashMap.this.cacheSize; } }; } public synchronized int getCurrentSize() { return maps.size(); } public synchronized void put(K k, V v) { if (k == null) { throw new Error("存入的键值不能为空"); } maps.put(k, v); } public synchronized void remove(K k) { if (k == null) { throw new Error("移除的键值不能为空"); } maps.remove(k); } public synchronized void clear() { maps = null; } // 获取集合 public synchronized Collection<V> getCollection() { if (maps != null) { return maps.values(); } else { return null; } } public static void main(String[] args) { // 测试 LRUByHashMap<Integer, String> maps = new LRUByHashMap<Integer, String>( 3); maps.put(1, "1"); maps.put(2, "2"); maps.put(3, "3"); maps.put(4, "4"); maps.put(5, "5"); maps.put(6, "6"); Collection<String> col = maps.getCollection(); System.out.println("存入缓存中的数据是--->>" + col.toString()); }}
--结束END--
本文标题: java LRU算法介绍与用法示例
本文链接: https://www.lsjlt.com/news/223350.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
2024-05-12
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0