作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
如果我有一个数据结构
Stock
{
String Symbol;
LinkedHashMap<Date,Double> DateForPrice;
}
我知道在 LinkedHashMap 中,我可以在不遍历整个列表的情况下获取特定日期的股票价格。
但是,如果我想从特定日期开始遍历 DateForPrice 的 LinkedHashMap,有没有什么办法可以不遍历整个列表?
最佳答案
LinkedHashMap
不提供在 map 数据的有序 View 中间开始迭代的方法。假设您的用例确实是您想要在某个 Date d
之后的所有日期并迭代这些日期,那么您应该将 map 存储为 TreeMap
.这里的一个重要区别是 LinkedHashMap
的顺序是 insertion-order,而我们假设的用例是您想要自然的 key-order。 TreeMap
维护这样一个 View ,通过 map 的键对 map 的内容进行排序。
TreeMap
的额外好处是允许您根据键创建 map 切片,因此您可以调用 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
,它是不可迭代的。但是它有返回Set
的entrySet
方法,它是Iterable
的子接口(interface)。
方便的是,如果您想继续将数据存储在 LinkedHashMap
中,您可以简单地用当前实例加载一个 TreeMap
(当然需要一些性能权衡) :
TreeMap<Date, Double> dateSortedDateForPrice = new TreeMap<Date, Double>(dateForPrice);
关于java - 如何从 LinkedHashMap 中的特定键开始迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6591012/
我是一名优秀的程序员,十分优秀!