NavigableMap
接口的 Java collections framework 提供了导航 map 条目的功能。
它被认为是 SortedMap 的一种类型。
实现 NavigableMap 的类
由于 NavigableMap
是一个 interface,我们无法从中创建对象。
为了使用 NavigableMap
接口的功能,我们需要使用实现 NavigableMap
的 TreeMap
类。
如何使用 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()
方法返回 k1 和 k2 之间的键相关的条目,包括与 k1 相关的条目。
bv1 和 bv2 是可选参数。 bv1 的默认值为 true,bv2 的默认值为 false
。
如果将 false
作为 bv1 传入,则该方法返回 k1 和 k2 之间的键相关的条目,但不包括与 k1 相关的条目。
如果将 true
作为 bv2 传入,则该方法返回 k1 和 k2 之间的键相关的条目,包括与 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
类的实现。