原文: https://www.programiz.com/java-programming/navigablemap

在本教程中,我们将通过一个示例学习 Java NavigableMap接口及其方法。

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

它被视为 SortedMap 的一种。


实现NavigableMap的类

由于NavigableMap是一个接口,因此我们无法从中创建对象。

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

Java `NavigableMap`接口 - 图1


如何使用NavigableMap

在 Java 中,我们必须导入java.util.NavigableMap包才能使用NavigableMap。 导入包后,将按照以下方法创建可导航的映射。

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

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

这里,

  • key - 用于关联映射中每个元素(值)的唯一标识符
  • value - 映射中与按键相关联的元素

NavigableMap的方法

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

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

但是,SortedMapheadMap()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的默认值为truebv2的默认值为false

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

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


其他方法

NavigableMap提供了各种可用于定位映射条目的方法。

  • DescendingMap() - 反转映射中的条目顺序
  • DescendingKeyMap() - 反转映射中按键的顺序
  • ceilingEntry() - 返回其键大于或等于指定键的所有条目中键最低的条目
  • ceilingKey() - 返回大于或等于指定键的那些键中的最低键
  • floorEntry() - 返回其键小于或等于指定键的所有条目中具有最高键的条目
  • floorKey() - 返回小于或等于指定键的那些键中的最高键
  • upperEntry(): - 返回其键大于指定键的所有条目中键最低的条目
  • upperKey(): - 返回大于指定键的那些键中的最低键
  • lowerEntry(): - 返回其键小于指定键的所有条目中具有最高键的条目
  • lowerKey(): - 返回小于指定键的那些键中的最高键
  • firstEntry(): - 返回映射的第一个条目(具有最低键的条目)
  • lastEntry(): - 返回映射的最后一个条目(具有最高键的条目)
  • pollFirstEntry(): - 返回并删除映射的第一个条目
  • pollLastEntry(): - 返回并删除映射的最后一个条目

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


TreeMap类中NavigableMap的实现

  1. import java.util.NavigableMap;
  2. import java.util.TreeMap;
  3. class Main {
  4. public static void main(String[] args) {
  5. // Creating NavigableMap using TreeMap
  6. NavigableMap<String, Integer> numbers = new TreeMap<>();
  7. // Insert elements to map
  8. numbers.put("Two", 2);
  9. numbers.put("One", 1);
  10. numbers.put("Three", 3);
  11. System.out.println("NavigableMap: " + numbers);
  12. // Access the first entry of the map
  13. System.out.println("First Entry: " + numbers.firstEntry());
  14. // Access the last entry of the map
  15. System.out.println("Last Entry: " + numbers.lastEntry());
  16. // Remove the first entry from the map
  17. System.out.println("Removed First Entry: " + numbers.pollFirstEntry());
  18. // Remove the last entry from the map
  19. System.out.println("Removed Last Entry: " + numbers.pollLastEntry());
  20. }
  21. }

输出

  1. NavigableMap: {One=1, Three=3, Two=2}
  2. First Entry: One=1
  3. Last Entry: Two=2
  4. Removed First Entry: One=1
  5. Removed Last Entry: Two=2

要了解有关TreeMap的更多信息,请访问 Java TreeMap


现在我们知道了NavigableMap接口,我们将在下一个教程中详细了解如何使用TreeMap类实现该接口。