哪些Java集合(和映射)可以按最后访问时间排序?

4
我知道 LinkedHashMap 提供了一个构造函数,您可以在其中指定地图是否应按访问顺序排序,从而有效地提供 LRU 实现。请问哪些(如果有的话)大型集合和映射提供此功能?

你需要哪些其他的集合?你可以使用Collections.newSetFromMap() - Joachim Sauer
很好,我会点赞这个的 :) - kostja
2个回答

4

1

我认为不存在这样的集合或映射(但我刚刚第一次听说那个构造函数)。 我已经检查过 Guava,但我认为它们也没有解决方案。

但我认为可以使用装饰器模式轻松实现。编写一个委托对象,实现您想要的接口,并将所有方法委托给内部对象。 您的包装器还包含一个LinkedHashSet / LinkedHashMap(取决于您是处理集合还是映射),用于记录数据访问。

现在,您的iterator() / entrySet() 方法提供了一个视图,其首先由LinkedHashSet / Map支持,然后由其余数据支持(如果您想要反向访问顺序,则相反)。

我会使用类似Collections类中的包装器方法来实现它。

例如:

Map<String,String> map = CollectionUtils.viewMapByAccessOrder(
                             new HashMap<String,String>());
List<String> list = CollectionUtils.viewListByAccessOrder(
                             new ArrayList<String>());

这实际上可能是适用于更大受众的功能。我建议在Guava项目中提交一个功能请求。


那个可以工作,谢谢。也许我一开始应该就询问除了LinkedHashMap之外的LRU实现 :) - kostja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接