for (Entry<Double, String> entry : map.entrySet()) {
Double key = entry.getKey();
String value = entry.getValue();
// double nextKey = ?
// String nextvalue = ?
// double prevKey = ?
// String prevValue = ?
}
是否可以在迭代地图时知道前一个元素和下一个元素是什么?
答案 0 :(得分:13)
您可以使用NavigableMap
,entrySet()
的迭代器返回条目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)
TreeMap是OrderedMap
和NavigableMap
,允许您前后迭代,允许您使用lowerKey()
和{{访问上一个和下一个键1}}分别。然而,它可能不是最好的解决方案。
您能描述一下您尝试解决的实际问题,我们可以为您提供更合适的解决方案吗?