博客
关于我
treeMap中的key会自动按照字母排序,也可以利用比较器自定义排序
阅读量:407 次
发布时间:2019-03-05

本文共 2011 字,大约阅读时间需要 6 分钟。

TreeMap详细解析

TreeMap是Java集合框架中基于红黑树(Red-Black tree)实现的NavigableMap,它能够根据键的自然顺序或提供的Comparator进行排序。默认情况下,TreeMap是按升序排列的,但可以通过构造函数提供Comparator来实现降序或自定义排序。

TreeMap的特点

TreeMap的主要特点包括:

  • 排序机制:TreeMap中的键(key)是有序的,排序方式取决于比较器(Comparator)的实现。默认情况下,键是按升序排列的。如果提供Comparator,可以根据Comparator的逻辑进行降序或其他自定义排序。

  • 查找效率:TreeMap支持快速查找操作,查找的时间复杂度为O(log n),这使得它在大量数据操作中非常高效。

  • 可导航性:TreeMap实现了NavigableMap接口,支持下界、上界以及 ceiling/floor 操作,这些操作使得集合的元素可以方便地被查找和导航。

  • TreeMap的构造与使用

    TreeMap的构造方式有两种主要形式:

  • 无参构造:默认构造使用自然顺序进行排序,键的顺序取决于其类型的自然比较。例如,Integer键会按升序排列,String键会按字典序排列。

  • 带Comparator构造:通过构造函数传入Comparator,可以自定义键的排序逻辑。例如,可以传入一个Comparator使TreeMap按降序排列。

  • 示例一:按键降序排序

    以下是一个按键降序排序的示例:

    TreeMap
    map = new TreeMap<>(new Comparator
    () { @Override public int compare(String obj1, String obj2) { return obj2.compareTo(obj1); // 降序排序 }});map.put("b", "ccccc");map.put("d", "aaaaa");map.put("c", "bbbbb");map.put("a", "ddddd");Iterator
    iter = map.keySet().iterator();while (iter.hasNext()) { String key = iter.next(); System.out.println(key + ":" + map.get(key));}

    运行结果为:

    d:aaaaac:bbbbbb:ccccca:ddddd
    示例二:按值排序

    如果需要根据值进行排序,可以通过将TreeMap的Entry(键值对)转换为列表,并对列表进行排序。以下是一个按值升序排序的示例:

    TreeMap
    map = new TreeMap<>();map.put("a", "ddddd");map.put("c", "bbbbb");map.put("d", "aaaaa");map.put("b", "ccccc");List
    > list = new ArrayList<>(map.entrySet());Collections.sort(list, new Comparator
    >() { @Override public int compare(Map.Entry
    t1, Map.Entry
    t2) { return t1.getValue().compareTo(t2.getValue()); }});for (Map.Entry
    mapping : list) { System.out.println(mapping.getKey() + ":" + mapping.getValue());}

    运行结果为:

    d:aaaaac:bbbbbb:ccccca:ddddd

    注意事项

  • 默认排序方式:TreeMap的默认排序方式是按键的自然顺序(升序)。如果需要自定义排序,必须提供Comparator。

  • 性能考虑:TreeMap的查找和插入操作均为O(log n),其性能非常优异,适合处理大量数据。

  • 排序稳定性:TreeMap的排序算法是基于红黑树的,因此在插入或删除操作后,树的结构可能会影响后续的查找性能。建议在高并发场景下谨慎使用。

  • 总结

    TreeMap作为Java集合框架中强大的有序映射工具,灵活性和性能使其在实际应用中具有重要地位。通过合理配置Comparator,开发者可以根据具体需求定义自定义的排序逻辑,充分发挥TreeMap的优势。

    转载地址:http://mbizz.baihongyu.com/

    你可能感兴趣的文章
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim教程【十二】
    查看>>
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NIO三大组件基础知识
    查看>>
    NIO与零拷贝和AIO
    查看>>
    NIO同步网络编程
    查看>>
    NIO基于UDP协议的网络编程
    查看>>