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

2022-09-04 07:01:30
for (Entry<Double, String> entry : map.entrySet()) { 
        Double key = entry.getKey(); 
        String value = entry.getValue(); 

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

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

在迭代地图时,是否有可能知道上一个元素和下一个元素是什么?


答案 1

你可以使用NavigableMap来实现这一点,它的迭代器按升序键顺序返回条目:entrySet()

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作为上一个,2nd作为当前,3rd作为下一个,如@Malt建议的那样。


答案 2

树状图是一个和一个,将允许您向前和向后迭代,允许您分别使用和访问上一个和下一个键。但是,它可能不是最佳解决方案。OrderedMapNavigableMaplowerKey()higherKey()

您能描述一下您要解决的实际问题,我们可以给您一个更合适的解决方案吗?