如果我有数据结构
Stock
{
String Symbol;
LinkedHashMap<Date,Double> DateForPrice;
}
我知道在LinkedHashMap中,我可以在不遍历整个列表的情况下获得特定日期的股票价格。
但是,如果我想从特定日期开始遍历DateForPrice的LinkedHashMap,有没有办法在不遍历整个列表的情况下执行它?
答案 0 :(得分:7)
LinkedHashMap
没有提供在地图数据的有序视图中间开始迭代的方法。假设您的用例确实是您想要在Date d
之后的所有日期并迭代这些日期,那么您应该将地图存储为TreeMap
。这里一个重要的区别是LinkedHashMap
的排序是插入顺序,我们假设的用例是你想要自然的键顺序 。 TreeMap
维护这样的视图,按地图的键对地图内容进行排序。
TreeMap
还有一个额外的好处,即允许您根据键创建地图切片,因此您可以调用tailMap(K k)
,以便在{{1}之后返回包含所有键的地图}。在这种情况下,您可以使用起始点k
来呼叫tailMap
。
e.g:
d
TreeMap<Date, Double> dateForPrice;
// load up dateForPrice
Date start = // the point to start your iteration
for(Entry<Date, Double> entry : dateForPrice.tailMap(start).entrySet()){
// loop code
}
方法返回tailMap
,这是不可迭代的。但它有SortedMap
方法返回entrySet
,它是Set
的子接口。
方便的是,如果您想继续将数据存储在Iterable
中,您只需使用当前实例加载LinkedHashMap
(当然还有一些性能权衡):
TreeMap
答案 1 :(得分:0)
我建议改为使用TreeMap
- 它将按日期排序,您可以使用tailMap
获取所需的部分