Интерфейс NavigableMap
Интерфейс NavigableMap расширяет интерфейс SortedMap
и добавляет методы для навигации по карте. Он позволяет
находить ближайшие ключи относительно заданного значения:
наименьший ключ, больший или равный заданному, наибольший
ключ, меньший или равный заданному, а также получать
и удалять элементы с начала или конца карты. Карта хранит
элементы в отсортированном порядке по ключам. Основные
реализации этого интерфейса - это TreeMap
и ConcurrentSkipListMap.
Синтаксис
NavigableMap<K, V> map = new TreeMap<>();
Основные методы
Интерфейс NavigableMap предоставляет следующие
ключевые методы для навигации:
firstEntry() // первый (наименьший) элемент
lastEntry() // последний (наибольший) элемент
lowerEntry(K key) // элемент с ключом меньше заданного
floorEntry(K key) // элемент с ключом меньше или равным
ceilingEntry(K key) // элемент с ключом больше или равным
higherEntry(K key) // элемент с ключом больше заданного
pollFirstEntry() // извлечь и удалить первый элемент
pollLastEntry() // извлечь и удалить последний элемент
descendingMap() // карта в обратном порядке
Пример
Давайте создадим NavigableMap и найдем элементы
относительно заданного ключа:
import java.util.NavigableMap;
import java.util.TreeMap;
public class Main
{
public static void main(String[] args)
{
NavigableMap<Integer, String> map = new TreeMap<>();
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");
map.put(4, "d");
map.put(5, "e");
System.out.println(map.firstEntry());
System.out.println(map.lastEntry());
System.out.println(map.lowerEntry(3));
System.out.println(map.floorEntry(3));
System.out.println(map.ceilingEntry(3));
System.out.println(map.higherEntry(3));
}
}
Результат выполнения кода:
1=a
5=e
2=b
3=c
3=c
4=d
Пример
Давайте получим карту в обратном порядке и извлечем первый и последний элементы:
import java.util.NavigableMap;
import java.util.TreeMap;
public class Main
{
public static void main(String[] args)
{
NavigableMap<Integer, String> map = new TreeMap<>();
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");
map.put(4, "d");
map.put(5, "e");
NavigableMap<Integer, String> res = map.descendingMap();
System.out.println(res);
System.out.println(map.pollFirstEntry());
System.out.println(map.pollLastEntry());
System.out.println(map);
}
}
Результат выполнения кода:
{5=e, 4=d, 3=c, 2=b, 1=a}
1=a
5=e
{2=b, 3=c, 4=d}
Пример
Давайте получим подкарты с помощью методов
headMap, tailMap и subMap:
import java.util.NavigableMap;
import java.util.TreeMap;
public class Main
{
public static void main(String[] args)
{
NavigableMap<Integer, String> map = new TreeMap<>();
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");
map.put(4, "d");
map.put(5, "e");
System.out.println(map.headMap(3, true));
System.out.println(map.tailMap(3, true));
System.out.println(map.subMap(2, true, 4, true));
}
}
Результат выполнения кода:
{1=a, 2=b, 3=c}
{3=c, 4=d, 5=e}
{2=b, 3=c, 4=d}
Смотрите также
-
интерфейс
Map,
который является базовым интерфейсом для всех карт -
метод
put,
который добавляет пару ключ-значение в карту -
метод
get,
который возвращает значение по ключу -
интерфейс
NavigableMap,
который предоставляет методы навигации по карте