java – 从HashMap中删除最旧的对象以达到一定的大小?
|
我有一个 Java中的哈希映射,我需要限制其大小(50000的顺序).但我应该只删除最旧的项目.项的时间戳存储在条目对象的字段中: Map<String,MyModel> snapshot = new HashMap<>(); 和 public class MyModel {
private ZonedDateTime createdAt;
// other fields...
}
我还按时间戳顺序将它们插入到地图中. 完成这种删除最旧条目的最有效方法是什么?请注意,时间“阈值”未知,只有Map的最终大小. 解决方法HashMap没有“最老的”,它没有“第一”,它没有订单.另一方面,LinkedHashMap就是为此设计的,它在条目之间维护一个双向链表,因此保持它们的插入顺序,它还提供了一个 public static void main(final String args[]) throws Exception {
final int maxSize = 4;
final LinkedHashMap<String,String> cache = new LinkedHashMap<String,String>() {
@Override
protected boolean removeEldestEntry(final Map.Entry eldest) {
return size() > maxSize;
}
};
cache.put("A","A");
System.out.println(cache);
cache.put("B","A");
System.out.println(cache);
cache.put("C","A");
System.out.println(cache);
cache.put("D","A");
System.out.println(cache);
cache.put("E","A");
System.out.println(cache);
cache.put("F","A");
System.out.println(cache);
cache.put("G","A");
}
输出: {A=A}
{A=A,B=A}
{A=A,B=A,C=A}
{A=A,C=A,D=A}
{B=A,D=A,E=A}
{C=A,E=A,F=A}
大健康警告
(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
