java – 支持基于最近访问过的项目的高效启动策略的数据结构
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 支持基于最近访问过的项目的高效启动策略的数据结构,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1488字,纯文字阅读大概需要3分钟。
内容图文
我需要一个数据结构,以支持最长时间前请求的项目的最有效的启动策略.例如,我有一堆不时要求的物品.当我内存不足时,我想踢出我数据结构中最古老的项目(哈希映射).
我在想像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.
所以你应该使用appropriate constructor:
Map<K, V> 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<K, V> extends LinkedHashMap<K, V> {
private static final int MAX_ENTRIES = 100;
public Cache() {
super(SOME_INITIAL_CAPACITY, SOME_LOAD_FACTOR, true);
}
protected boolean removeEldestEntry(Entry<K, V> entry) {
return size() > MAX_ENTRIES;
}
}
用法:
Map<K, V> map = new Cache<>();
内容总结
以上是互联网集市为您收集整理的java – 支持基于最近访问过的项目的高效启动策略的数据结构全部内容,希望文章能够帮你解决java – 支持基于最近访问过的项目的高效启动策略的数据结构所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。