反向迭代ConcurrentSkipListMap

Wal*_*ari 3 java iterator

我有一个带有一些值的地图.

public ConcurrentMap<Long, Double> data = new ConcurrentSkipListMap<>();
Run Code Online (Sandbox Code Playgroud)

我该如何反向迭代?Java迭代器似乎没有next()函数或反转映射的函数.

Ale*_*you 5

ConcurrentSkipListMapimplements ConcurrentNavigableMap,有一个descdendingMap()方法返回反向排序的这个map的视图:

Iterator<Entry<Long, Double>> reversed = data.descendingMap().entrySet().iterator();
Run Code Online (Sandbox Code Playgroud)

然而,CSLM反向迭代器是比直接迭代器(为O(log N)VS O(1)为每个较慢next()),并因此应该在需要很少的前提下使用.否则,请考虑使用"反向"自定义比较器创建地图:

data = new ConcurrentSkipListMap<>((k1, k2) -> Long.compare(k2, k1));
Run Code Online (Sandbox Code Playgroud)