iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >TreeMap 详解
  • 484
分享到

TreeMap 详解

java数据结构开发语言 2023-08-31 14:08:05 484人浏览 安东尼
摘要

概述 TreeMap 是 Java 中的一种集合类,它实现了 SortedMap 接口,可以根据键的自然顺序或者自定义顺序对元素进行排序,底层实现采用了红黑树(Red-Black Tree)的数据结构。TreeMap 中的元素是按照键的排序

概述

TreeMap 是 Java 中的一种集合类,它实现了 SortedMap 接口,可以根据键的自然顺序或者自定义顺序对元素进行排序,底层实现采用了红黑树(Red-Black Tree)的数据结构。TreeMap 中的元素是按照键的排序顺序存储的,可以高效地进行查找、插入和删除操作。

基本特点

  1. 有序性:TreeMap 通过红黑树数据结构来维护键值对的顺序,因此它能够保证键值对按照键的自然顺序或自定义顺序排列,而且可以快速地进行插入、查找和删除等操作。

  2. 元素唯一:TreeMap 中的键是唯一的,因此相同的键只能存储一个元素。如果在 TreeMap 中插入一个已经存在的键,则新的值会覆盖原有的值

  3. 可排序性:由于 TreeMap 是有序的,因此它提供了多种按照键排序的方法,比如自然排序和自定义排序。

  4. 映射性:TreeMap 是一种映射表数据结构,可以用键来查找对应的值,同时也支持键值对的遍历操作。

  5. 线程安全:与 HashMap 类似,TreeMap 也是线程不安全的,如果在多线程环境下使用,需要进行同步处理。

  6. 性能优异:TreeMap 的基本操作的时间复杂度为 O(log n),因此它具有较好的性能表现,适合处理大量的键值对。

  7. 内存占用较高:由于 TreeMap 内部采用红黑树数据结构,因此它的内存占用较高,比 HashMap 稍微大一些。

需要注意的是,如果在 TreeMap 中存储 null 键或值,会抛出 NullPointerException 异常。如果需要在 TreeMap 中存储 null 键或值,可以使用自定义排序,并在 compare 方法中处理 null 值的情况。

因为在使用自然排序(Natural Ordering)时,如果在 TreeMap 中插入 null 键,会抛出 NullPointerException 异常。这是因为在自然排序下,TreeMap 会使用键的 compareTo 方法进行比较,而如果键为 null,则无法进行比较,从而导致异常的抛出。

但是,在使用自定义排序(Custom Ordering)时,可以使用 null 作为键。自定义排序是通过实现 Comparator 接口来定义的,其中 compare 方法用于比较两个对象。在自定义排序下,如果 compare 方法返回 0,表示两个对象相等,因此可以使用 null 作为键。例如:

// 自定义排序,允许 null 键TreeMap treeMap = new TreeMap<>(new Comparator() {    @Override    public int compare(String s1, String s2) {        if (s1 == null && s2 == null) {            return 0;        }        if (s1 == null) {            return -1;        }        if (s2 == null) {            return 1;        }        return s1.compareTo(s2);    }});// 存储 null 键和值treeMap.put(null, "value1");treeMap.put("key2", null);// 获取值String value1 = treeMap.get(null); // value1String value2 = treeMap.get("key2"); // null

需要注意的是,虽然自定义排序允许使用 null 作为键,但在实际开发中,尽量避免使用 null 值,因为它容易引起空指针异常等问题,不利于程序的可读性和可维护性。 

TreeMap 的创建和基本操作

  1. 创建 TreeMap 对象

    TreeMap treeMap = new TreeMap<>();
  2.  添加元素
    treeMap.put(key, value);
  3. 删除元素

    treeMap.remove(key);
  4. 获取元素

    treeMap.get(key);

TreeMap的排序和遍历

  1. 自然排序

    在 Java 中,TreeMap 的自然排序指的是按照键的自然顺序进行排序。对于字符串类型的键,自然顺序是按照字典序排序;对于数字类型的键,自然顺序是按照数字大小排序。

    如果要使用 TreeMap 的自然排序,只需要使用无参构造函数创建 TreeMap 对象即可。例如,下面的代码创建了一个按照自然顺序排序的 TreeMap 对象,并向其中插入了一些元素:

    import java.util.TreeMap;public class Main {    public static void main(String[] args) {        // 创建一个按照自然顺序排序的 TreeMap 对象        TreeMap treeMap = new TreeMap<>();                // 插入元素        treeMap.put("ccc", 1);        treeMap.put("aaa", 2);        treeMap.put("DDD", 3);        treeMap.put("bbb", 4);        // 遍历 TreeMap        for (String key : treeMap.keySet()) {            System.out.println(key + ": " + treeMap.get(key));        }    }}

    输出结果为:

    aaa: 2
    bbb: 4
    ccc: 1
    ddd: 3

  2. 自定义排序

    除了使用默认的排序方式,也可以使用自定义的排序方式来对 TreeMap 中的键进行排序。这可以通过在创建 TreeMap 对象时,传入一个比较器(Comparator)对象来实现。比较器是一个接口,需要实现其中的 compare 方法,该方法用于定义键的排序规则。

    例如,我们可以创建一个按照键的长度降序排序的 TreeMap 对象:

    import java.util.Comparator;import java.util.TreeMap;public class Main {    public static void main(String[] args) {        // 创建一个按照键的长度降序排序的 TreeMap 对象        TreeMap treeMap = new TreeMap<>(new Comparator() {            @Override            public int compare(String o1, String o2) {                return Integer.compare(o2.length(), o1.length());            }        });                // 插入元素        treeMap.put("abc", 1);        treeMap.put("a", 2);        treeMap.put("defg", 3);        treeMap.put("bcd", 4); //长度和"abc" 一样,不输出        // 遍历 TreeMap        for (String key : treeMap.keySet()) {            System.out.println(key + ": " + treeMap.get(key));        }    }}

    输出结果为:

    defg: 3
    abc: 1
    a: 2

  3. 遍历 TreeMap:可以使用迭代器(Iterator)或者 for-each 循环遍历 TreeMap 中的键值对。
        // 遍历 TreeMap    for (String key : treeMap.keySet()) {        System.out.println(key + ": " + treeMap.get(key));    }    // 使用迭代器遍历 TreeMap    Iterator> iterator = treeMap.entrySet().iterator();    while (iterator.hasNext()) {        Map.Entry entry = iterator.next();        System.out.println(entry.geTKEy() + ": " + entry.getValue());    }

 TreeMap 的其他特性

  1. 获取第一个和最后一个键
    Key firstKey = treeMap.firstKey();Key lastKey = treeMap.lastKey();
  2. 获取小于或等于某个键的最大键
    Key floorKey = treeMap.floorKey(key);
  3. 获取大于或等于某个键的最小键
    Key ceilingKey = treeMap.ceilingKey(key);

 本质上红黑树实现的,所以以此重点掌握红黑树即可

来源地址:https://blog.csdn.net/gycaaa/article/details/130076292

--结束END--

本文标题: TreeMap 详解

本文链接: https://www.lsjlt.com/news/385855.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • TreeMap 详解
    概述 TreeMap 是 Java 中的一种集合类,它实现了 SortedMap 接口,可以根据键的自然顺序或者自定义顺序对元素进行排序,底层实现采用了红黑树(Red-Black Tree)的数据结构。TreeMap 中的元素是按照键的排序...
    99+
    2023-08-31
    java 数据结构 开发语言
  • java TreeMap源码解析详解
    java TreeMap源码解析详解 在介绍TreeMap之前,我们来了解一种数据结构:排序二叉树。相信学过数据结构的同学知道,这种结构的数据存储形式在查找的时候效率非常高。如图所示,这种数据结构是以二叉树为基础的,所有的左孩子的...
    99+
    2023-05-31
    java treemap 源码
  • Java基础之TreeMap详解
    目录一、写在前面二、定义三、成员变量四、内部类五、构造器六、成员方法一、写在前面 TreeMap的底层数据结构是红黑树,且TreeMap可以实现集合元素的排序。 所以TreeMap...
    99+
    2024-04-02
  • Java 详解Map集合之HashMap和TreeMap
    目录HashMap创建HashMap添加元素访问元素删除元素TreeMap创建TreeMap添加元素访问元素删除元素HashMap、TreeMap区别 Map接口储存一组成对的键-值...
    99+
    2024-04-02
  • java中TreeMap集合的常用方法详解
    目录public Map.Entry<K,V> ceilingEntry(K key)public K ceilingKey(K ...
    99+
    2024-04-02
  • JDK集合源码之解析TreeMap(二)
    目录删除元素删除再平衡删除元素举例二叉树的遍历TreeMap的遍历总结删除元素 删除元素本身比较简单,就是采用二叉树的删除规则。 如果删除的位置有两个叶子节点,则从其右子树...
    99+
    2024-04-02
  • 一文带你深入了解Java TreeMap
    目录概述TreeMap介绍构造方法关键方法使用案例核心机制实现原理源码解析成员变量查找get方法插入put方法删除remove方法概述 TreeMap是Map家族中的一员,也是用来存...
    99+
    2024-04-02
  • JDK集合源码之解析TreeMap(一)
    目录简介继承体系存储结构源码解析属性Entry内部类构造方法get(Object key)方法特性再回顾左旋右旋插入元素插入再平衡插入元素举例总结简介 TreeMap使用红黑树存储元...
    99+
    2024-04-02
  • Java TreeMap源码是什么
    这篇文章主要介绍“Java TreeMap源码是什么”,在日常操作中,相信很多人在Java TreeMap源码是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java TreeMap源码是什么”的疑惑有所...
    99+
    2023-06-17
  • 一文带你全面深入了解TreeMap
    概述 TreeMap是Map家族中的一员,也是用来存放key-value键值对的。平时在工作中使用的可能并不多,它最大的特点是遍历时是有顺序的,根据key的排序规则来,那么它具体是如何使用,又是怎么实现的呢?本文基于jdk8做一个讲解。 T...
    99+
    2023-09-05
    算法 java 数据结构
  • java treemap线程安全问题怎么解决
    要解决Java TreeMap的线程安全问题,有以下几种方法:1. 使用Collections.synchronizedMap()方...
    99+
    2023-10-20
    java
  • TreeMap怎么在Java中使用
    这期内容当中小编将会给大家带来有关TreeMap怎么在Java中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3....
    99+
    2023-06-14
  • 怎么比较HashMap和TreeMap
    这期内容当中小编将会给大家带来有关怎么比较HashMap和TreeMap,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.AbstractMap抽象类和SortedMap接口AbstractMap抽象类:...
    99+
    2023-06-17
  • java中TreeMap的特性有哪些
    这篇文章给大家介绍java中TreeMap的特性有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序。1...
    99+
    2023-06-14
  • java中treemap和treeset实现红黑树
    TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点。TreeSet 和 TreeMap 的关系为了让大家了解 TreeMap 和 TreeSet 之间的关系,下面先看 TreeSe...
    99+
    2023-05-30
    java treemap treeset
  • GoFrame gmap遍历hashmap listmap treemap使用技巧
    目录先说结论map类型使用技巧基础概念对比sync.Map基础使用合并 merge序列化过滤空值键值对反转 Flip出栈(随机出栈)总结文章比较硬核,爆肝2千多字,除了hashmap...
    99+
    2024-04-02
  • 怎么在java中实现TreeMap排序
    怎么在java中实现TreeMap排序?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 定义TreeMap的排序方法使用Comparator对象作为参数需要注意的是:排序...
    99+
    2023-05-30
    java treemap
  • 【Java 数据结构】TreeMap和TreeSet的介绍
    目录 1、认识 TreeMap 和 TreeSet 2、TreeMap 的主要成员变量 3、TreeMap 的主要构造方法 4、TreeMap 和 TreeSet 的元素必须可比较 5、TreeMap 和 TreeSet 关于 key...
    99+
    2023-09-04
    数据结构 TreeMap TreeSet
  • 怎么在Java中利用TreeMap实现一个排序算法
    怎么在Java中利用TreeMap实现一个排序算法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。TreeMap 和 HashMap 用法大致相同,但实际需求中,我们需要把一...
    99+
    2023-05-31
    java treemap 排序算法
  • EventBus详解 (详解 + 原理)
    一、EventBus的使用介绍 EventBus简介 EventBus是一个开源库,由GreenRobot开发而来,是用于Android开发的 “事件发布—订阅总线”, 用来进行模块间通信、解藕。它可以使用很少的代码,来实现多组件之间...
    99+
    2023-08-31
    android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作