ConcurrentSkipListMap
реализует ConcurrentNavigableMap
, который имеет descdendingMap()
метод, возвращающий вид этой карты заказанного в обратном направлении:
Iterator<Entry<Long, Double>> reversed = data.descendingMap().entrySet().iterator();
Однако CSLM обращенно итератора гораздо медленнее, чем прямой итератора (O (журнал N) против O (1) для каждого next()
), и поэтому его следует использовать только в случае крайней необходимости. В противном случае подумайте о создании карты с использованием «реверсивного» пользовательского компаратора:
data = new ConcurrentSkipListMap<>((k1, k2) -> Long.compare(k2, k1));
очень умное решение! Он имеет базовый компаратор для преобразования reverseOrder() – mlewandowski
@mlewandowski, но, принимая тот факт, что узлы ввода и индекса являются односвязными, такая итерация будет намного медленнее, поскольку индекс, однако, должен пересекаться в прямом направлении –