我有一张带有一些值的地图。
public ConcurrentMap<Long, Double> data = new ConcurrentSkipListMap<>();
如何反向迭代? Java迭代器似乎没有next()函数或函数来反转地图。
答案 0 :(得分:5)
ConcurrentSkipListMap
实现ConcurrentNavigableMap
,其中descdendingMap()
方法返回此地图的反向排序视图:
Iterator<Entry<Long, Double>> reversed = data.descendingMap().entrySet().iterator();
但是,CSLM反转迭代器多比直接迭代器(每个next()
的O(log N)对O(1))慢,因此只有在很少需要时才应该使用。否则,请考虑使用“反向”自定义比较器创建地图:
data = new ConcurrentSkipListMap<>((k1, k2) -> Long.compare(k2, k1));