如何从LinkedHashMap中的特定键开始迭代?

时间:2011-07-06 02:43:29

标签: java traversal linkedhashmap

如果我有数据结构

Stock
{
  String Symbol;
  LinkedHashMap<Date,Double> DateForPrice;  
}

我知道在LinkedHashMap中,我可以在不遍历整个列表的情况下获得特定日期的股票价格。

但是,如果我想从特定日期开始遍历DateForPrice的LinkedHashMap,有没有办法在不遍历整个列表的情况下执行它?

2 个答案:

答案 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获取所需的部分