这是来自my previous question的后续问题。
我正在尝试实现定义为NavigableMap
的NavigableMap<Timestamp, Event>
。我需要这张地图对我来说就像一个缓存。我每5分钟刷新一次此NavigableMap
。
一个线程更新此NavigableMap
,而另一个线程从中读取,因此它必须是线程安全的。每当我有请求时,我都需要获取Events
的子集列表,其时间戳在给定的start
和end
时间之内。
将NavigableMap
转换为此子集列表(例如ArrayList
)的最有效方法是什么?这个接口的线程安全实现是什么?
显然NavigableMap
具有子映射方法以及floor
和ceiling
,但是我看不到任何可转换为具有开始时间和结束时间的列表的方法。
最佳答案
要从NavigableMap
中提取键范围,请调用subMap(K fromKey, K toKey)
或subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive)
。
如果只想将这些值作为列表,请执行以下操作:
List<Event> list = new ArrayList<>(map.subMap(start, end).values());
这个接口的线程安全实现是什么?
根据javadoc:
ConcurrentSkipListMap