树形排序-TreeMap或者递归

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

耳东哇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值