Освоение Java NavigableMap: возможности, методы и реализация TreeMap
Интерфейс Java NavigableMap
Это руководство объясняет интерфейс Java NavigableMap, его основные методы и использование с TreeMap.
Интерфейс NavigableMap Java Collections Framework предоставляет возможности навигации по записям карты. Это специализированный SortedMap, расширяющий его функциональность методами для эффективного двунаправленного обхода.
Класс, реализующий NavigableMap
Поскольку NavigableMap — интерфейс, его нельзя инстанцировать напрямую. Основная реализация — класс TreeMap, предлагающий структуру самобалансирующегося бинарного дерева поиска, поддерживающую ключи в отсортированном порядке.
Как использовать NavigableMap
Сначала импортируйте интерфейс:
import java.util.NavigableMap;
import java.util.TreeMap;
Затем создайте экземпляр:
// Реализация NavigableMap классом TreeMap
NavigableMap<Key, Value> numbers = new TreeMap<>();
В коде выше numbers — это TreeMap, хранящий пары ключ-значение. Key — уникальный идентификатор, а Value — ассоциированные данные.
Основные методы NavigableMap
Все операции SortedMap доступны, но несколько переопределены для более строгого контроля. Ключевые методы включают:
headMap(key, booleanInclusive)
Возвращает представление части карты, ключи которой строго меньше key, когда booleanInclusive — false (по умолчанию). Если booleanInclusive — true, возвращаемая карта включает запись для key.
tailMap(key, booleanInclusive)
Возвращает представление части карты, ключи которой больше или равны key, когда booleanInclusive — true (по умолчанию). Передача false исключает запись key.
subMap(fromKey, fromInclusive, toKey, toInclusive)
Предоставляет представление между fromKey и toKey. Значения по умолчанию: fromInclusive = true и toInclusive = false. Изменение этих флагов контролирует, включены ли граничные ключи в результирующую карту.
Дополнительные методы навигации
- descendingMap() — переворачивает порядок записей.
- descendingKeySet() — перевёрнутое представление ключей.
- ceilingEntry(key) — наименьшая запись с ключом >= заданного.
- ceilingKey(key) — наименьший ключ >= заданного.
- floorEntry(key) — наибольшая запись с ключом <= заданного.
- floorKey(key) — наибольший ключ <= заданного.
- higherEntry(key) — наименьшая запись с ключом > заданного.
- higherKey(key) — наименьший ключ > заданного.
- lowerEntry(key) — наибольшая запись с ключом < заданного.
- lowerKey(key) — наибольший ключ < заданного.
- firstEntry() — запись с наименьшим ключом.
- lastEntry() — запись с наибольшим ключом.
- pollFirstEntry() — извлекает и удаляет первую запись.
- pollLastEntry() — извлекает и удаляет последнюю запись.
Для официальной спецификации см. документацию Java NavigableMap.
Пример реализации TreeMap
import java.util.NavigableMap;
import java.util.TreeMap;
class Main {
public static void main(String[] args) {
// Создание NavigableMap через TreeMap
NavigableMap<String, Integer> numbers = new TreeMap<>();
// Вставка элементов в карту
numbers.put("Two", 2);
numbers.put("One", 1);
numbers.put("Three", 3);
System.out.println("NavigableMap: " + numbers);
// Доступ к первой записи карты
System.out.println("First Entry: " + numbers.firstEntry());
// Доступ к последней записи карты
System.out.println("Last Entry: " + numbers.lastEntry());
// Удаление первой записи из карты
System.out.println("Removed First Entry: " + numbers.pollFirstEntry());
// Удаление последней записи из карты
System.out.println("Removed Last Entry: " + numbers.pollLastEntry());
}
}
Вывод
NavigableMap: {One=1, Three=3, Two=2} First Entry: One=1 Last Entry: Two=2 Removed First Entry: One=1 Removed Last Entry: Two=2
Узнайте больше о TreeMap в документации Java TreeMap.
С твёрдым пониманием интерфейса NavigableMap и его реализации TreeMap вы можете строить эффективные отсортированные структуры данных для ваших Java-приложений.
java
- Освоение интерфейсов в C#: определение, реализация и практические примеры
- Освоение операторов Java: типы, синтаксис и практические примеры
- Интерфейсы в Java: концепции, реализация и лучшие практики
- Try-with-resources в Java: автоматическое управление ресурсами
- Освоение интерфейса NavigableSet в Java: навигация, сортировка и практические примеры
- Освоение Java Lambda-выражений: от основ к Stream API
- Интерфейс vs Абстрактный класс в Java: Как выбрать правильную абстракцию
- Интерфейсы в Java: определение, использование и лучшие практики
- Java 9 Private Interface Methods: инкапсуляция и повторное использование кода
- Логирование в Java: лучшие практики для надежного кода