我有一个带有一些值的地图.
public ConcurrentMap<Long, Double> data = new ConcurrentSkipListMap<>();
Run Code Online (Sandbox Code Playgroud)
我该如何反向迭代?Java迭代器似乎没有next()函数或反转映射的函数.
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)