7

如果我有一个数据结构

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

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

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

4

2 回答 2

9

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

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
}

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

方便的是,如果您想继续将数据存储在 a 中,LinkedHashMap您可以简单地TreeMap使用当前实例加载 a (当然要进行一些性能权衡):

TreeMap<Date, Double> dateSortedDateForPrice = new TreeMap<Date, Double>(dateForPrice);
于 2011-07-06T02:52:00.207 回答
0

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

于 2011-07-06T02:51:27.667 回答