Java NavigableMap 接口

NavigableMap 接口的 Java collections framework 提供了导航 map 条目的功能。

它被认为是 SortedMap 的一种类型。


实现 NavigableMap 的类

由于 NavigableMap 是一个 interface,我们无法从中创建对象。

为了使用 NavigableMap 接口的功能,我们需要使用实现 NavigableMapTreeMap 类。

Java TreeMap class implements the Java NavigableMap interface.


如何使用 NavigableMap?

在 Java 中,我们必须导入 java.util.NavigableMap 包才能使用 NavigableMap。导入包后,我们可以像这样创建一个可导航 map。

// NavigableMap implementation by TreeMap class
NavigableMap<Key, Value> numbers = new TreeMap<>();

在上面的代码中,我们使用 TreeMap 类创建了一个名为 numbers 的可导航 map。

这里,

  • Key - 用于将 map 中的每个元素(值)关联起来的唯一标识符
  • Value - 由键在 map 中关联的元素

NavigableMap 的方法

NavigableMap 被认为是 SortedMap 的一种类型。这是因为 NavigableMap 扩展了 SortedMap 接口。

因此,所有 SortedMap 方法在 NavigableMap 中也可用。要了解这些方法在 SortedMap 中的定义方式,请访问 Java SortedMap

然而,SortedMap 的某些方法(headMap()tailMap()subMap())在 NavigableMap 中的定义方式不同。

让我们看看这些方法在 NavigableMap 中的定义方式。


headMap(key, booleanValue)

headMap() 方法返回可导航 map 中与指定 key(作为参数传入)之前的所有键相关的条目。

booleanValue 是一个可选参数。其默认值为 false

如果作为 booleanValue 传入 true,则该方法返回与指定 key 之前的所有键相关的条目,包括与指定 key 相关的条目。


tailMap(key, booleanValue)

tailMap() 方法返回可导航 map 中与指定 key(作为参数传入)之后的所有键相关的条目,包括与指定 key 相关的条目。

booleanValue 是一个可选参数。其默认值为 true

如果作为 booleanValue 传入 false,则该方法返回与指定 key 之后的所有键相关的条目,但不包括与指定 key 相关的条目。


subMap(k1, bv1, k2, bv2)

subMap() 方法返回 k1k2 之间的键相关的条目,包括与 k1 相关的条目。

bv1bv2 是可选参数。 bv1 的默认值为 true,bv2 的默认值为 false

如果将 false 作为 bv1 传入,则该方法返回 k1k2 之间的键相关的条目,但不包括与 k1 相关的条目。

如果将 true 作为 bv2 传入,则该方法返回 k1k2 之间的键相关的条目,包括与 k1 相关的条目。


其他方法

NavigableMap 提供了多种可用于定位 map 条目的方法。

  • descendingMap() - 反转 map 中条目的顺序
  • descendingKeyMap() - 反转 map 中键的顺序
  • ceilingEntry() - 返回具有最低键的条目,该键是所有大于或等于指定键的条目中
  • ceilingKey() - 返回最低键,该键是所有大于或等于指定键的键中
  • floorEntry() - 返回具有最高键的条目,该键是所有小于或等于指定键的条目中
  • floorKey() - 返回最高键,该键是所有小于或等于指定键的键中
  • higherEntry() - 返回具有最低键的条目,该键是所有大于指定键的条目中
  • higherKey() - 返回最低键,该键是所有大于指定键的键中
  • lowerEntry() - 返回具有最高键的条目,该键是所有小于指定键的条目中
  • lowerKey() - 返回最高键,该键是所有小于指定键的键中
  • firstEntry() - 返回 map 的第一个条目(具有最低键的条目)
  • lastEntry() - 返回 map 的最后一个条目(具有最高键的条目)
  • pollFirstEntry() - 返回并移除 map 的第一个条目
  • pollLastEntry() - 返回并移除 map 的最后一个条目

欲了解更多信息,请访问 Java NavigableMap(官方 Java 文档)


TreeMap 类中 NavigableMap 的实现

import java.util.NavigableMap;
import java.util.TreeMap;

class Main {

    public static void main(String[] args) {
        // Creating NavigableMap using TreeMap
        NavigableMap<String, Integer> numbers = new TreeMap<>();

        // Insert elements to map
        numbers.put("Two", 2);
        numbers.put("One", 1);
        numbers.put("Three", 3);
        System.out.println("NavigableMap: " + numbers);

        // Access the first entry of the map
        System.out.println("First Entry: " + numbers.firstEntry());

        // Access the last entry of the map
        System.out.println("Last Entry: " + numbers.lastEntry());

        // Remove the first entry from the map
        System.out.println("Removed First Entry: " + numbers.pollFirstEntry());

        // Remove the last entry from the map
        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 类的实现。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战