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

发布于 2024-11-18 12:58:17 字数 257 浏览 2 评论 0原文

有一个我知道的数据结构

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

如果我在 LinkedHashMap 中

,我可以获取特定日期的股票价格,而无需遍历整个列表。但是,如果我想从特定日期开始迭代 DateForPrice 的 LinkedHashMap,有什么方法可以在不遍历整个列表的情况下完成此操作?

If I have a data structure

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

I know in the LinkedHashMap, I can get the stock price of specific date without traversing the whole list.

However, if I want to iterate through the LinkedHashMap of DateForPrice starting from a specific date, are there any way to do it without traversing the whole list?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凉薄对峙 2024-11-25 12:58:17

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

TreeMap 的另一个好处是允许您根据键创建地图切片,因此您可以调用 tailMap(K k),返回包含 < 之后出现的所有键的映射代码>k。在这种情况下,您可以使用起点 d 调用 tailMap

例如:

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,它是不可迭代的。但它有返回SetentrySet方法,它是Iterable的子接口。

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

TreeMap<Date, Double> dateSortedDateForPrice = new TreeMap<Date, Double>(dateForPrice);

LinkedHashMap doesn’t offer a way to start iterating in the middle of its ordered view of the map’s data. Supposing your use case is really that you want all dates after some Date d and to iterate those, then you should probably store your map as a TreeMap. An important distinction here is that LinkedHashMap’s ordering is the insertion-order, and our supposed use-case here is that you want the natural key-order. TreeMaps maintain such a view, sorting the contents of the map by the map’s key.

TreeMaps have the additional benefit of allowing you to create slices of the map based on the key, so you can call tailMap(K k), to return the map with all keys occurring after k. In this case, you can call tailMap with your starting point, d.

e.g.:

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 method returns SortedMap, which is not iterable. But it has entrySet method returning Set, which is subinterface of Iterable.

Conveniently, if you want to keep storing your data in a LinkedHashMap you can simply load up a TreeMap with your current instance (with some performance tradeoff, of course):

TreeMap<Date, Double> dateSortedDateForPrice = new TreeMap<Date, Double>(dateForPrice);
一抹微笑 2024-11-25 12:58:17

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

I'd suggest to use TreeMap instead - it will be sorted by date and you can use tailMap to get the required portion

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文