如果我有一个数据结构
Stock
{
String Symbol;
LinkedHashMap<Date,Double> DateForPrice;
}
我知道在 LinkedHashMap 中,我可以得到特定日期的股票价格,而无需遍历整个列表。
但是,如果我想从特定日期开始遍历 DateForPrice 的 LinkedHashMap,有没有办法在不遍历整个列表的情况下做到这一点?
如果我有一个数据结构
Stock
{
String Symbol;
LinkedHashMap<Date,Double> DateForPrice;
}
我知道在 LinkedHashMap 中,我可以得到特定日期的股票价格,而无需遍历整个列表。
但是,如果我想从特定日期开始遍历 DateForPrice 的 LinkedHashMap,有没有办法在不遍历整个列表的情况下做到这一点?
LinkedHashMap
不提供在地图数据的有序视图中间开始迭代的方法。假设您的用例确实是您希望所有日期都在某个日期之后Date d
并对其进行迭代,那么您可能应该将地图存储为TreeMap
. 这里的一个重要区别是,它LinkedHashMap
的排序是插入顺序,我们假设的用例是你想要自然的键顺序。TreeMap
s 维护这样一个视图,按地图的键对地图的内容进行排序。
TreeMap
s 的另一个好处是允许您根据键创建映射的切片,因此您可以调用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);
我建议TreeMap
改用它-它将按日期排序,您可以使用它tailMap
来获取所需的部分