SortedMap、NavigableMap与TreeMap的介绍与应用实例

简介: 这个例子演示了如何使用 `TreeMap`来存储产品和它们的价格,以及如何利用 `TreeMap`的导航功能来查找特定条件下的产品。通过这种方式,`SortedMap`、`NavigableMap`和 `TreeMap`提供了一种非常灵活和强大的方式来处理有序数据。

在Java集合框架中,SortedMapNavigableMapTreeMap是处理有序映射关系的关键接口和实现类。它们为我们在数据结构中的键值对排序和导航提供了丰富的功能。让我们逐一深入了解它们的特性、区别以及如何在实际应用中使用它们。

SortedMap简介

SortedMap是一个接口,扩展了 Map接口,用于保持键的有序性。它确保映射中的键按照升序排列,或者根据构造映射时提供的 Comparator进行排序。这种有序性使得一些操作,如返回第一个(firstKey())或最后一个(lastKey())键,变得简单直接。

NavigableMap简介

NavigableMap接口进一步扩展了 SortedMap接口,添加了导航方法以返回给定搜索目标的最接近匹配项。例如,higherKey(), lowerKey(), ceilingKey(), 和 floorKey()等方法使得查找那些不完全匹配的键变得可能。这些功能在需要精确控制元素排序或者在有序集合中高效搜索时非常有用。

TreeMap简介

TreeMapNavigableMap接口的一个具体实现,它通过红黑树实现。它保证了元素的有序状态并且提供了 NavigableMap接口中定义的所有导航方法。TreeMap是一个非常强大的类,它结合了键的自然排序或者根据 Comparator的排序,以及快速查找、插入和删除操作的能力。

应用实例

假设我们有一个需求,需要存储和排序一些产品的价格,然后根据价格快速找到产品。我们可以使用 TreeMap来实现这个需求。

import java.util.TreeMap;

public class ProductPriceExample {
    public static void main(String[] args) {
        TreeMap<Double, String> priceToProductMap = new TreeMap<>();

        // 添加产品及其价格
        priceToProductMap.put(19.99, "T-Shirt");
        priceToProductMap.put(99.99, "Jeans");
        priceToProductMap.put(299.99, "Smartphone");
        priceToProductMap.put(59.99, "Belt");

        // 显示所有产品及价格
        System.out.println("Products and prices: " + priceToProductMap);

        // 查找比给定价格稍高的第一个产品
        Double higherPrice = priceToProductMap.higherKey(50.00);
        if (higherPrice != null) {
            System.out.println("First product with a price higher than 50: " + priceToProductMap.get(higherPrice));
        }

        // 查找价格最低的产品
        Double lowestPrice = priceToProductMap.firstKey();
        System.out.println("Product with the lowest price: " + priceToProductMap.get(lowestPrice));

        // 查找价格最高的产品
        Double highestPrice = priceToProductMap.lastKey();
        System.out.println("Product with the highest price: " + priceToProductMap.get(highestPrice));
    }
}
​

这个例子演示了如何使用 TreeMap来存储产品和它们的价格,以及如何利用 TreeMap的导航功能来查找特定条件下的产品。通过这种方式,SortedMapNavigableMapTreeMap提供了一种非常灵活和强大的方式来处理有序数据。

目录
相关文章
|
监控 Java
jvm性能调优实战 - 24模拟因动态年龄判断对象进入老年代的场景
jvm性能调优实战 - 24模拟因动态年龄判断对象进入老年代的场景
395 0
|
存储 监控 安全
在Linux中,如何进行日志审计?
在Linux中,如何进行日志审计?
|
jenkins Java 持续交付
Docker搭建jenkins环境
这篇文章详细介绍了如何利用Docker搭建Jenkins环境,包括拉取Jenkins镜像、配置端口映射及初始化设置的步骤。
548 0
Docker搭建jenkins环境
|
关系型数据库 MySQL Linux
Linux下查看软件安装与安装路径
Linux下查看软件安装与安装路径
1742 0
|
自然语言处理 索引
Elasticsearch之常用DSL语句
mapping是对索引库中文档的约束
351 1
|
XML JSON 算法
JWT详细讲解(保姆级教程)
本篇博文详细讲解JWT概念,组成,运行过程,和SAM相比的优势,并附加SpringBoot整合JWT的案例。
JWT详细讲解(保姆级教程)
java将字符串按照指定长度分割成字符串数组
java将字符串按照指定长度分割成字符串数组
325 0
|
存储 固态存储 虚拟化
云计算——虚拟化中的网络架构与虚拟网络(文末送书)
云计算——虚拟化中的网络架构与虚拟网络(文末送书)
1106 0
|
缓存 Kubernetes Java
SpringBoot 集成 Apollo 配置中心,一文搞定!(万字长文)
由于 Apollo 概念比较多,刚开始使用比较复杂,最好先过一遍概念再动手实践尝试使用。 1、背景 随着程序功能的日益复杂,程序的配置日益增多,各种功能的开关、参数的配置、服务器的地址……对程序配置的期望值也越来越高,配置修改后实时生效,灰度发布,分环境、分集群管理配置,完善的权限、审核机制…… 在这样的大环境下,传统的通过配置文件、数据库等方式已经越来越无法满足开发人员对配置管理的需求。因此 Apollo 配置中心应运而生!
|
消息中间件 NoSQL 关系型数据库
实战:如何防止mq消费方消息重复消费、rocketmq理论概述、rocketmq组成、普通消息的发送
实战:如何防止mq消费方消息重复消费 如果因为网络延迟等原因,mq无法及时接收到消费方的应答,导致mq重试。(计算机网络)。在重试过程中造成重复消费的问题
3086 1
实战:如何防止mq消费方消息重复消费、rocketmq理论概述、rocketmq组成、普通消息的发送