哪些java集合(和映射)可以按上次访问进行排序

时间:2010-09-29 07:49:09

标签: java sorting collections

我知道LinkedHashMap提供了一个构造函数,您可以在其中指示是否应按访问顺序对映射进行排序,从而有效地提供LRU实现。你能告诉我哪些(如果)大型馆藏动物园的其他馆藏和地图都提供这个功能吗?

2 个答案:

答案 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项目中提交功能请求。