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

Joe*_*iao 5 java traversal linkedhashmap

如果我有数据结构

Stock
{
  String Symbol;
  LinkedHashMap<Date,Double> DateForPrice;  
}
Run Code Online (Sandbox Code Playgroud)

我知道在LinkedHashMap中,我可以获得特定日期的股票价格,而无需遍历整个列表.

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

Mar*_*iot 7

LinkedHashMap没有提供在地图数据的有序视图中间开始迭代的方法.假设您的用例确实是您希望所有日期在一些日期之后Date d并迭代这些日期,那么您应该将地图存储为TreeMap.这里一个重要的区别是,LinkedHashMap排序是插入顺序,我们假设的用例是你想要的自然键顺序.TreeMap维护这样的视图,按地图的键对地图内容进行排序.

TreeMaps还有一个额外的好处,就是允许你根据键创建地图切片,这样你就可以调用tailMap(K k),返回地图,其中包含所有键k.在这种情况下,您可以tailMap使用起点进行呼叫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
}
Run Code Online (Sandbox Code Playgroud)

tailMap方法返回SortedMap,这是不可迭代的.但它有entrySet方法返回Set,这是子接口Iterable.

方便的是,如果你想继续存储你的数据,LinkedHashMap你可以简单地TreeMap用你当前的实例加载一个(当然有一些性能权衡):

TreeMap<Date, Double> dateSortedDateForPrice = new TreeMap<Date, Double>(dateForPrice);
Run Code Online (Sandbox Code Playgroud)


den*_*nko 0

我建议改为使用TreeMap- 它将按日期排序,您可以使用它tailMap来获取所需的部分