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

标签 java traversal linkedhashmap

如果我有一个数据结构

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

我知道在 LinkedHashMap 中,我可以在不遍历整个列表的情况下获取特定日期的股票价格。

但是,如果我想从特定日期开始遍历 DateForPrice 的 LinkedHashMap,有没有什么办法可以不遍历整个列表?

最佳答案

LinkedHashMap 不提供在 map 数据的有序 View 中间开始迭代的方法。假设您的用例确实是您想要在某个 Date d 之后的所有日期并迭代这些日期,那么您应该将 map 存储为 TreeMap .这里的一个重要区别是 LinkedHashMap 的顺序是 insertion-order,而我们假设的用例是您想要自然的 key-orderTreeMap 维护这样一个 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,它是不可迭代的。但是它有返回SetentrySet方法,它是Iterable的子接口(interface)。

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

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

关于java - 如何从 LinkedHashMap 中的特定键开始迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6591012/

相关文章:

algorithm - 高效遍历单向树

c - 递归打印目录及其子目录中所有文件的文件路径

java - 使用嵌套 for 循环搜索 LinkedHashMap

c++ - 等价于 C++ 中的 LinkedHashmap?

jquery - 如何在 jQuery 中获取父元素的索引

java - 按值降序对 linkedhashmap 进行排序

java - 错误 @annotation 切入点表达式仅在 Java 5 合规性级别或更高级别受支持

java - 为 double 创建哈希集

openssl aes-256-ctr加密文件Java解密

java - 外部枚举类是隐式静态的吗?