树形排序-TreeMap或者递归

2023-11-19

1TreeMap

TreeMap来实现树形结构的排序。TreeMap是一个有序的key-value集合,它是通过红黑树实现的。TreeMap默认按照key的升序排序,如果您想要按照每个层级的创建时间排序,您可以将每个节点的创建时间作为key,然后将节点作为value存储在TreeMap中。
TreeMap的keySet()方法获取到一个有序的key集合,然后遍历这个集合来获取到有序的节点列表

public class Node {
    private String name;
    private Date createTime;
    private List<Node> children;

    // 省略getter和setter方法

    public static void main(String[] args) {
        // 创建一个TreeMap
        Map<Date, List<Node>> map = new TreeMap<>();
        // 添加节点到TreeMap中
        for (Node node : nodeList) {
            Date key = node.getCreateTime();
            List<Node> list = map.get(key);
            if (list == null) {
                list = new ArrayList<>();
                map.put(key, list);
            }
            list.add(node);
        }
        // 遍历TreeMap的keySet()方法获取到有序的key集合
        for (Date key : map.keySet()) {
            List<Node> list = map.get(key);
            // 对每个层级内部进行排序
            Collections.sort(list, new Comparator<Node>() {
                @Override
                public int compare(Node o1, Node o2) {
                    return o1.getCreateTime().compareTo(o2.getCreateTime());
                }
            });
            // 处理节点
            for (Node node : list) {
                System.out.println(node.getName());
            }
        }
    }
}

参考:
(1) java 8 数据树层级关系嵌套自定义排序模糊匹配生成和扁平化_北辰微雨的博客-CSDN博客. https://blog.csdn.net/jsonms/article/details/124106301.
(2) java之TreeUtils生成一切对象树形结构 - 掘金 - 稀土掘金. https://juejin.cn/post/6847902218407018503.
(3) Java树形结构介绍以及Java生成树形结构数据的样例代码_java生成树形结构编码_温水先生的博客-CSDN博客. https://blog.csdn.net/qq_42722951/article/details/107381273.

2Java的递归算法来实现树形结构的排序

public class Node {
    private String name;
    private Date createTime;
    private List<Node> children;

    // 省略getter和setter方法

    public void sortChildren() {
        if (children != null) {
            Collections.sort(children, new Comparator<Node>() {
                @Override
                public int compare(Node o1, Node o2) {
                    return o1.getCreateTime().compareTo(o2.getCreateTime());
                }
            });
            for (Node child : children) {
                child.sortChildren();
            }
        }
    }

    public static void main(String[] args) {
        // 创建根节点
        Node root = new Node();
        root.setName("root");
        root.setCreateTime(new Date());
        // 创建子节点
        Node child1 = new Node();
        child1.setName("child1");
        child1.setCreateTime(new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24));
        Node child2 = new Node();
        child2.setName("child2");
        child2.setCreateTime(new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 48));
        // 添加子节点到根节点
        root.setChildren(Arrays.asList(child1, child2));
        // 对树形结构进行排序
        root.sortChildren();
    }
}

在这个示例代码中,我们定义了一个sortChildren()方法,该方法会对当前节点的子节点进行排序,并递归调用每个子节点的sortChildren()方法。这样,我们就可以通过递归算法来实现树形结构的排序。
参考:
(1) JAVA实现树结构List递归遍历_supich的博客-CSDN博客. https://blog.csdn.net/qq_37638959/article/details/105851942.
(2) Java递归实现树结构(包含Java 8 方法)_递归生成树形结构_打更人—的博客-CSDN博客. https://blog.csdn.net/SpringLsL/article/details/119956647.
(3) Java数据结构——树的遍历算法(递归和非递归实现) - 知乎. https://zhuanlan.zhihu.com/p/102460785.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树形排序-TreeMap或者递归 的相关文章

随机推荐

  • RTThread学习有关的Keil的两个符号 $Sub$ $main 与 $Super$ $main

    Keil的两个符号 Sub 与 Super 是其做的打 补丁 功能 具体调用方法就是程序中包含有main函数 和 Sub main Super main 两个符号 源码先放出来 re define main function int Sub
  • 三校生计算机教育,三校生有什么专业

    三校生的专业有计算机信息类 旅游类 艺术类 电工技术类 农林类 机械类 建筑工程类 经济管理类 外语类 烹饪 生物化学类 国土资源类 体育类 教育类 交通运输类 自动化类 包装印刷类 医学类 护理学 药学类 铁道运输类 师范类 水利水电类
  • CTreeView

    ClassWizard为CTreeCtrl 树控件 添加的NM DBLCLK 双击 消息的响应函数中带有一个NMHDR 型指针形参 1 OnDblClkTree NMHDR pNMHDR LRESULT pResult 这个陌生的指针类型常
  • IDEA中使用Java连接MySQL数据库的配置和使用方法

    文章目录 IDE和必要配置 数据库连接代码 IDE和必要配置 IDE IntelliJ IDEA 2023 1 必要配置 1 安装好JDK 并且配置环境变量 2 导入MYSQL数据库所需的驱动 如果没有导入 可以参考这篇文章IDEA中的My
  • android Scroller

    参考 http www linuxidc com Linux 2016 01 127276 htm 以前只知道怎么使用scroller 照猫画虎 复制粘贴 今天遇到使用scroller 还是要去搜索 这样不行 要搞懂原理 上面的博客写的很漂
  • 静态链表

    include
  • Linux下防御ddos攻击

    1 Linux下防御ddos攻击 导读 Linux服务器在运营过程中可能会受到黑客攻击 常见的攻击方式有SYN DDOS等 通过更换IP 查找被攻击的站点可能避开攻击 但是中断服务的时间比较长 比较彻底的解决方法是添置硬件防火墙 不过 硬件
  • spring-boot的快速开发

    1 使用Intellij中的Spring Initializr来快速构建Spring Boot Cloud工程 菜单栏中选中Files gt New gt Projects 这个Initializr Service URL 我们一般使用默认
  • 短视频文案如何写,学会以下几种方法,离爆款绝对不远。

    短视频运营 视频肯定是关键 文案是对视频的一种衬托 但是也并不代表文案不重要 在短视频中的段子文案也是精心设计的 所以今天要分享的是视频介绍里的文案 是怎么炼成的 下面就跟大家讲讲如何写出比较好的视频文案 仅仅是形式 具体还是要看自己进行灵
  • 如何在figma中做交互设计

    近一年来 Figma它可以说是体验设计领域最受欢迎的工具 最近 我开始频繁地工作 Axure9 0和Figma切换使用 深刻感受到设计细节带来的体验差异化 今天 通过一些细节和亮点 总结了工具软件体验设计的几个原则 添加图片注释 不超过 1
  • 手把手教你K最近邻分类器分类CIFAR-10

    KNN算法全称为k Nearest Neighbor Classifier 即k最近邻分类器 它可以看作是Nearest Neighbor Classifier最近邻分类器的加强版 无论是最近邻分类器还是k最近邻分类器 其原理都比较简单 其
  • 前端基础之JavaScript

    知识预览 JavaScript概述 JavaScript的基础 JavaScript的对象 BOM对象 DOM对象 实例练习 js扩展 一 JavaScript概述 JavaScript的历史 1992年Nombas开发出C minus m
  • Git 命令/配置笔记

    创建分支命令 git branch 分支名 切换分支命令 git checkout 分支名 合并分支 到当前分支 git merge 列出本地分支 git branch 删除分支 git branch d 分支名 指定标签信息命令 git
  • ESP8266 ERROR:cut here for exception decoder

    在使用ESP8266获取网站的json信息时 串口输出错误信息 cut here for exception decoder 解决办法 获取json的格式不正确 检查json格式的括号 是否缺少
  • 静态代码扫描中Java资源对象关闭的探究

    本人在探究静态代码扫描中资源对象关闭规则遇到了一些疑惑 本文将这些疑惑记录下来并逐一找出解答 包括在哪些情况下 这些资源对象需要手动关闭 怎么正确的关闭 哪些情况下不需要手动关闭 以及为什么 资源对象包括很多种 本文重点关注输入输出流对象和
  • Process in Shell

    PID current process Get Process Get Process Select Object Name Get Process processname jm Select Object Get Process proc
  • 将本地项目上传到自己公司的gitlab(或是官网gitlab)下(第一次上传)

    转自 https blog csdn net litianxiang kaola article details 74075151 自己公司的gitlab和官网gitlab都是以下的操作步骤 我是自己公司的gitlab已成功 1 安装git
  • python学习笔记(五)---函数

    函数的定义 定义一个函数要使用def语句 依次写出函数名 括号 括号中的参数和冒号 然后 在缩进块中编写函数体 函数的返回值用return语句返回 求绝对值的my abs函数 def my abs x if x gt 0 return x
  • 转载的开源干货

    android相关 第三方库 awesome android ui 大量 Android UI UX 库 大城小黄 recyclerview animators 一个关于RecyclerView items的动画库 一个简单的Recycle
  • 树形排序-TreeMap或者递归

    1TreeMap TreeMap来实现树形结构的排序 TreeMap是一个有序的key value集合 它是通过红黑树实现的 TreeMap默认按照key的升序排序 如果您想要按照每个层级的创建时间排序 您可以将每个节点的创建时间作为key