反向迭代ConcurrentSkipListMap

时间:2016-03-10 15:36:27

标签: java iterator

我有一张带有一些值的地图。

public ConcurrentMap<Long, Double> data = new ConcurrentSkipListMap<>();

如何反向迭代? Java迭代器似乎没有next()函数或函数来反转地图。

1 个答案:

答案 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));