我知道LinkedHashMap提供了一个构造函数,您可以在其中指示是否应按访问顺序对映射进行排序,从而有效地提供LRU实现。你能告诉我哪些(如果)大型馆藏动物园的其他馆藏和地图都提供这个功能吗?
答案 0 :(得分:4)
我认为我不完全理解这个问题,但您可能希望了解LRUMap框架的Commons Collections实现。
答案 1 :(得分:1)
我认为不存在任何此类集合或地图(但我刚刚第一次听说过该构造函数)。我已经检查了Guava,但我认为他们也没有解决方案。
但我认为可以使用装饰器模式轻松实现。编写实现所需接口的委托对象,并将所有方法委托给内部对象。您的包装器还包含一个LinkedHashSet / LinkedHashMap(取决于您是处理集合还是映射),它记录了数据访问。
现在你的iterator()/ entrySet()方法提供了一个视图,它首先由LinkedHashSet / Map支持,然后由其余数据支持(反之亦然,如果你想反转访问顺序)。
我会使用类似于Collections类中的包装器方法来实现它。
E.g。
Map<String,String> map = CollectionUtils.viewMapByAccessOrder(
new HashMap<String,String>());
List<String> list = CollectionUtils.viewListByAccessOrder(
new ArrayList<String>());
这实际上可能是对更多受众有意义的功能。我会考虑在Guava项目中提交功能请求。