Joe*_*iao 5 java traversal linkedhashmap
如果我有数据结构
Stock
{
String Symbol;
LinkedHashMap<Date,Double> DateForPrice;
}
Run Code Online (Sandbox Code Playgroud)
我知道在LinkedHashMap中,我可以获得特定日期的股票价格,而无需遍历整个列表.
但是,如果我想从特定日期开始迭代DateForPrice的LinkedHashMap,有没有办法在不遍历整个列表的情况下执行它?
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)
| 归档时间: |
|
| 查看次数: |
2201 次 |
| 最近记录: |