Поиск по древовидной карте, затем итерация по порядку для всех записей, превышающих некоторый ключ - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть TreeMap ; что я хотел бы сделать, это найти запись, которая имеет определенный длинный ключ, а затем перебрать все записи, которые идут «после» конкретного ключа. По сути, мне нужен вариант TreeMap.floorEntry (ключ K), который возвращает итератор на карту, а не Map.Entry. Есть ли способ получить этот эффект?

1 Ответ

0 голосов
/ 02 ноября 2018

Вы хотите использовать SortedMap#tailMap(Object)

Возвращает вид части этой карты, у которой ключей больше чем или равно fromKey. Возвращенная карта поддерживается этой картой, поэтому Изменения в возвращенной карте отражаются на этой карте и наоборот. Возвращенная карта поддерживает все дополнительные операции карты, которые эта карта поддерживает.

Например,

TreeMap<Long, Integer> m = new TreeMap<>();
m.put(1L, 1);
m.put(2L, 1);
m.put(3L, 1);
m.put(4L, 1);
m.put(5L, 1);
m.put(6L, 1);
m.put(7L, 1);
m.put(8L, 1);
System.out.println(m.tailMap(3L));

напечатает все записи в исходной карте, ключи которых больше или равны ключу 3L.

{3=1, 4=1, 5=1, 6=1, 7=1, 8=1}

tailMap возвращает SortedMap. Вы можете назначить это переменной и делать с ней что хотите, например. получить его entrySet и повторить его.

...