【问题标题】:Java: iterator from TreeMap entry?Java:来自 TreeMap 条目的迭代器?
【发布时间】:2016-02-25 10:25:27
【问题描述】:

在 Java 中,TreeMap<K,V> 使用 RB-tree 来存储条目,允许使用 map.entrySet().iterator() 进行按序迭代,同时保证在 log(N) 时间内插入和查找。

TreeMap 还提供了查找给定键的上限和下限的方法:map.floorEntry(k)map.ceilingEntry()map.lowerEntry(k)map.higherEntry()。但是,它们的返回值是一个 Map.Entry<K,V> 实例,并且不会直接允许访问相邻条目。我想访问一个假设条目的潜在邻居,因为它的密钥。

有没有办法从 TreeMap 条目中获取迭代器或做我想做的事情?

比较习惯了C++的std::map<K,V>类,我这里有点茫然……

注意我愿意接受使用除 java.util 之外的容器库的解决方案,只要它具有具有合理时间复杂度保证的排序地图容器。

【问题讨论】:

    标签: java containers treemap


    【解决方案1】:

    可以将返回的Map.Entry<K, V>的key作为tailMap(K fromKey)headMap(K toKey)中的参数,对结果进行迭代。

    【讨论】:

    • 这几乎就是我要找的;但是,考虑到我想同时获取给定键之前和之后的条目,我将不得不调用这两种方法,这意味着两次查找,这似乎是在浪费 CPU 周期。
    • 好的,对不起,我误解了你的回答,你的意思显然是map.tailMap(map.lowerEntry(k).getKey())。这可行,但仍需要 2 次查找。
    • 另一种解决方案 - 根据您的需要制作自己的 TreeMap 迭代器,但这不是一件容易的事
    猜你喜欢
    • 2012-12-23
    • 2014-01-30
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2023-02-03
    相关资源
    最近更新 更多