跳到主要内容

Java NavigableMap 接口

提示
  1. 导航功能NavigableMap 接口在 Java 集合框架中提供了映射条目之间导航的功能,扩展自 SortedMap
  2. 主要实现类:要使用 NavigableMap 接口的功能,需通过 TreeMap 类,它是 NavigableMap 接口的主要实现。
  3. 核心方法NavigableMap 提供了多种方法来操作映射,包括 headMap(), tailMap(), subMap() 以及用于定位条目的 firstEntry(), lastEntry(), pollFirstEntry() 等。

Java 集合框架中的 NavigableMap 接口提供了在映射条目之间导航的功能。

它被视为 SortedMap 的一种类型。

实现 NavigableMap 的类

由于 NavigableMap 是一个接口,我们不能从中创建对象。

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

Java TreeMap 类实现了 Java NavigableMap 接口。

如何使用 NavigableMap?

在 Java 中,我们必须导入 java.util.NavigableMap 包才能使用 NavigableMap。一旦我们导入了包,以下是创建可导航映射的方式。

// TreeMap 类实现的 NavigableMap
NavigableMap<Key, Value> numbers = new TreeMap<>();

在上面的代码中,我们创建了一个名为 numbers 的可导航映射,该映射属于 TreeMap 类。

这里,

  • Key - 用于将每个元素(值)与映射中的元素相关联的唯一标识符
  • Value - 由键在映射中关联的元素

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

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

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

让我们看看这些方法在 NavigableMap 中是如何定义的。

headMap(key, booleanValue)

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

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

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

tailMap(key, booleanValue)

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

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

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

subMap(k1, bv1, k2, bv2)

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

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

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

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

其他方法

NavigableMap 提供了各种方法,可用于定位映射

的条目。

  • descendingMap() - 将映射中的条目顺序倒置
  • descendingKeyMap() - 将映射中的键顺序倒置
  • ceilingEntry() - 返回键大于或等于指定键的所有条目中键最小的条目
  • ceilingKey() - 返回键大于或等于指定键的所有键中最小的键
  • floorEntry() - 返回键小于或等于指定键的所有条目中键最大的条目
  • floorKey() - 返回键小于或等于指定键的所有键中最大的键
  • higherEntry() - 返回键大于指定键的所有条目中键最小的条目
  • higherKey() - 返回键大于指定键的所有键中最小的键
  • lowerEntry() - 返回键小于指定键的所有条目中键最大的条目
  • lowerKey() - 返回键小于指定键的所有键中最大的键
  • firstEntry() - 返回映射的第一个条目(键最小的条目)
  • lastEntry() - 返回映射的最后一个条目(键最大的条目)
  • pollFirstEntry() - 返回并移除映射的第一个条目
  • pollLastEntry() - 返回并移除映射的最后一个条目

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

在 TreeMap 类中实现 NavigableMap

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

class Main {

public static void main(String[] args) {
// 使用 TreeMap 创建 NavigableMap
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 类来实现它。