如何获取地图中的上一个键/值和下一个键/值

时间:2015-05-07 11:03:38

标签: java dictionary

for (Entry<Double, String> entry : map.entrySet()) { 
        Double key = entry.getKey(); 
        String value = entry.getValue(); 

        // double nextKey = ?
        // String nextvalue = ?

        // double prevKey = ?
        // String prevValue = ?
    } 

是否可以在迭代地图时知道前一个元素和下一个元素是什么?

2 个答案:

答案 0 :(得分:13)

您可以使用NavigableMapentrySet()的迭代器返回条目in ascending key order

NavigableMap<Double, String> myMap = new TreeMap<>();

//...

for (Map.Entry<Double, String> e : myMap.entrySet()) {
    Map.Entry<Double, String> next = myMap.higherEntry(e.getKey()); // next
    Map.Entry<Double, String> prev = myMap.lowerEntry(e.getKey());  // previous

   // do work with next and prev
}

每个条目检索都是O(logN),因此对于完全迭代,这不是最有效的方法。为了更有效,在迭代时只需记住最后3个条目,并使用1st作为prev,第2个作为current,第3个作为next,作为@Malt suggests

答案 1 :(得分:2)

TreeMapOrderedMapNavigableMap,允许您前后迭代,允许您使用lowerKey()和{{访问上一个和下一个键1}}分别。然而,它可能不是最好的解决方案。

您能描述一下您尝试解决的实际问题,我们可以为您提供更合适的解决方案吗?