TreeMap、二叉树

SikuliX实战:5分钟搞定游戏挂机脚本(附防检测思路与Python集成技巧) 本文详细介绍了如何使用SikuliX快速开发游戏挂机脚本,包括环境配置、基础原理、防检测策略及Python集成技巧。通过实战案例展示如何实现自动化任务、高级防检测方案,并结合Python提升脚本性能与智能度,帮助玩家高效完成重复性游戏操作。 阅读详情

前面我们学习了

Collection下面有:
1、List(ArrayList、LinkedList、Vector),重点我们理解了线程安全和不安全
2、Set下面的HashSet

Map下面的HashMap。
其中HashSet是基于HashMap实现的(就是HashMap的key,不重复)。

TreeMap

这里写图片描述
我们使用HashMap加入一些数据,但这些数据不能排序。

        Map<String,Integer> users = new TreeMap<String,Integer>();
        users.put("jack",19);
        users.put("lily",20);
        users.put("susan",22);
        users.put("robin",27);

        // 对users遍历
        for (Map.Entry<String,Integer> entry: users.entrySet()){
            System.out.println(entry.getKey()+":"+entry.getValue());
        }

打印结果:

jack:19
lily:20
robin:27
susan:22

可以看出TreeMap的对象遍历的时候默认是针对其key排序的。

如果我们要自定义排序方式,比如上面的排序 我们要倒序。

        Map<String,Integer> users = new TreeMap<String,Integer>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o2.compareTo(o1);
            }
        });

        users.put("jack",19);
        users.put("lily",20);
        users.put("susan",22);
        users.put("robin",27);

        // 对users遍历
        for (Map.Entry<String,Integer> entry: users.entrySet()){
            System.out.println(entry.getKey()+":"+entry.getValue());
        }

我们注意到new TreeMap里我们传入了Comparator对象,内部把o2和o1的ASCII码值进行比较。
现在输出结果:

susan:22
robin:27
lily:20
jack:19

按照字符串长度以及ASCII码进行比较:

        Map<String,Integer> users = new TreeMap<String,Integer>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return (o1.length()-o2.length()) + o1.compareTo(o2);
            }
        });

最后结果如下:

jack:19
lily:20
robin:27
susan:22

TreeMap是一个树结构

前面我们接触的ArrayList它是一个数组结构,LinkedList,它是一个链表结构。
这里写图片描述
比较简单的『树结构』就是二叉树,又称二叉查找树/二叉搜索树。
1、有个树根:Root
2、作用拥有2个子树(子节点)
3、左边子节点的值比自己小,右边子节点的只比自己大

写代码

1、写一个二叉树类BTree.java:


// 二叉树类
public class BTree {

    public Node root = null; //二叉数的根节点

    // 插入数据的方法
    public void put(int data){
        if (this.root == null){
            this.root = new Node(data);
        }else {
            this.root = this.addNode(root,data);
        }
    }

    // 添加节点
    private Node addNode(Node node,int data){
        if (node == null){
            return new Node(data);
        }

        if (data < node.selfData){
            node.leftNode = addNode(node.leftNode,data);
        }else if (data > node.selfData){
            node.rightNode = addNode(node.rightNode,data);
        }

        return node;
    }

    public void List(){
        List(root);
    }
    // 递归遍历所有节点
    public void List(Node n){
        if (n != null){
            List(n.leftNode); //递归
            System.out.println(n.selfData);
            List(n.rightNode);
        }
    }


    // 节点类
    class Node{
        private  Node leftNode = null; //左节点
        private  Node rightNode = null; //右节点
        private int selfData; //节点自身的数据

        // 构造函数
        public Node(int selfData) {
            this.selfData = selfData;
        }
    }
}

2、调用这个类,往二叉树对象里插入数据,最后遍历

        // 实例化二叉树
        BTree bTree = new BTree();

        // 插入数据
        bTree.put(5); //这就是树根
        bTree.put(3);
        bTree.put(7);
        bTree.put(2);
        bTree.put(9);
        bTree.put(8);
        bTree.put(1);
        bTree.put(6);

        // 显示二叉树对象中的所有数据
        bTree.List();

最后遍历打印结果如下:

1
2
3
5
6
7
8
9

如果要倒序,在BTree类的List()方法中就先打印右节点,后打印左节点:

    // 递归遍历所有节点
    public void List(Node n){
        if (n != null){
            List(n.rightNode); //递归
            System.out.println(n.selfData);
            List(n.leftNode);
        }
    }
VS2019编译配置Easy3D 阅读详情

相关推荐

LiteOS | 基于LiteOS的智慧农业案例实验分享

分享一个基于小熊派+LiteOS+华为云的案例实验(智慧农业)。 实验框图 相关模块简介 1、STM32L431RCT6 2、LiteOS LiteOS是华为开发的轻量级实时操作系统: LiteOS源码GitHub仓库链接: https://github.com/LiteOS/LiteOS 其源码一级目录结构如下: 其内核包括任务管理、内存管理、时间管理、通信机制、中断管理、队列管...

嵌入式大杂烩 5990

TreeMap

特性 public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, java.io.Serializable {} public interface NavigableMap<K,V> extends SortedMap<K,V> {} 所有属性前面都概述过,基本特性就是:排序性,可以被克隆,可以被序列化 基

qq_43843037的博客 302

SRRC型号核准的模块豁免规则解析——如何利用完整型模块简化设备认证流程

本文详细解析了SRRC型号核准中模块豁免规则的应用,重点介绍了完整型模块的技术定义、豁免条件及实际应用场景。通过合理利用完整型模块,企业可显著简化设备认证流程,缩短上市周期并降低成本。文章还提供了模块选型指南和常见问题解决方案,帮助工程师高效应对SRRC认证挑战。

weixin_29306011的博客 931

Java源码阅读-TreeMap

// Red-black mechanics private static final boolean RED = false; // 基于红黑树的数据结构 private static final boolean BLACK = true; 插入元素 /** * Associates the specified value with the speci

kieran的专栏 516

别再手动续期SSL证书了!用acme.sh配合阿里云DNS API,实现全自动HTTPS证书管理

本文详细介绍了如何使用acme.sh配合阿里云DNS API实现SSL/TLS证书的全自动管理,彻底解决手动续期带来的风险与不便。通过自动化部署流程,包括环境准备、API集成、多域名证书申请等关键步骤,帮助运维人员构建高效、可靠的HTTPS证书管理体系,显著提升安全性和运维效率。

weixin_29200485的博客 268

海康视觉平台VisionMaster实战入门:从通讯配置到工具应用

本文为海康VisionMaster视觉平台实战入门指南,详细介绍了从软件安装准备、与PLC等外部设备的通讯配置,到匹配定位、测量、畸变矫正等核心工具的应用方法。通过实战案例拆解,帮助工程师快速掌握如何搭建完整的机器视觉检测与引导定位系统,实现工业自动化项目落地。

weixin_29224309的博客 1006

TreeMap排序是怎么样的?

1.TreeMap是如何实现去重和排序的? TreeMap实现了SortedMap接口,它是一个key有序的Map类。 TreeMap的默认排序规则: TreeMap并不是根据插入的顺序来排序,而是根据key元素的 compareTo 方法来排序。 Map<Integer, Object> map = new TreeMap<>(); map.put(5, new Object()); map.put(10, new Object()); m...

IT蜗牛的专栏 1万+

开源LocalAI本地人工智能安装教程

LocalAI是一款能在本地运行的人工智能应用,它兼容了OpenAI API规范,它可以在普通的电脑运行,不需要GPU,也不需要联网,音频转录

2301_78652552的博客 3613

如何决定使用 HashMap 还是 TreeMap?

问:如何决定使用 HashMap 还是 TreeMap? 介绍 TreeMap<K,V>的Key值是要求实现java.lang.Comparable,所以迭代的时候TreeMap默认是按照Key值升序排序的;TreeMap的实现是基于红黑树结构。适用于按自然顺序或自定义顺序遍历键(key)。 HashMap<K,V>的Key值实现散列hashCode(),分布是散列的、均匀的,不支持排序;数据结构主要是桶(数组),链表或红黑树。适用于在Map中插入、删除和定位元素。 结论

AlbenXie的博客 616

Jupyter notebook教程系列(二)Jupyter notebook的基本用法

Jupyter notebook的基本使用   一. 主页面 如图1-1 我们先介绍一下主页面上的内容: 1.Files页面是用于管理创建文件相关类目的。 2.Running页面主要展示的是当前正在运行当中的终端和“ipynb”格式的notebook。若想要关闭已经打开的终端和“ipynb”格式的notebook,仅仅关闭其页面是无法彻底退出程序的,需要在Running页面点击其对...

dlhlSC的博客 1438

【ArcGIS风暴】ArcGIS 10.2导入Excel数据X、Y坐标(经纬度、平面坐标),生成Shapefile点数据图层

用过CASS的人都知道,野外数字测图得到的点数据(平面坐标)可以直接导入到CASS中,进一步绘制地形图。那么,带有坐标的数据能不能在ArcGIS中实现点图层的生成呢?答案是必须的! 本文以气象台站shp数据的生成为例,详细介绍ArcGIS 10.2中导入X、Y坐标(这里指的是经度、纬度),生成Shapefile点数据的流程。 相关阅读:《全站仪、RTK测量坐标数据在CASS和ArcGIS中展点的区别和联系》 目录 1、数据准备 2、添加X、Y数据 3、属性表连接(Join) 4、导出为Sh.

智慧空间实验室 10万+

有序Map的实现--TreeMap

统计区间中的整数数目;TreeMap、SortedDict、Map;有序Map的实现方式

rain_lin2000的博客 1347

单细胞转录组数据分析中的基因ID注释转换问题:如何解决才能注释所有的UMIcount数据?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1126

二叉树的垂序遍历(TreeMap)

给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。 对位于 (row, col) 的每个结点而言,其左右子结点分别位于 (row + 1, col - 1) 和 (row + 1, col + 1) 。树的根结点位于 (0, 0) 。 二叉树的 垂序遍历 从最左边的列开始直到最右边的列结束,按列索引每一列上的所有结点,形成一个按出现位置从上到下排序的有序列表。如果同行同列上有多个结点,则按结点的值从小到大进行排序。 返回二叉树的 垂序遍历 序列。 示例 1: 输入:root = [

FanShenDeXianYu的博客 326

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

treemap排序_二叉树和红黑树 TreeMap

(1) 简述树的概念和特征?① 树1) 树是由一个集合以及在该集合上定义的一种关系构成的.集合中的元素称为树的节点,所定义的关系称为父子关系.2) 父子关系在树的几点之间建立了一个层次结构.3) 树的结点包含一个数据元素及若干指向其子树的若干分支.4) 在这种层次结构中有一个结点具有特殊的地位,这个几点称为该树的根节点,或简称为树根.2二叉树每个结点的度 均不超过 2 的 有序 树,称为 二叉树(...

weixin_39997695的博客 231

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java 二叉树的高度_吃透Java集合系列十二:TreeMap

一:TreeMap整体认识我们知道HashMap,它保证了以O(1)的时间复杂度进行增、删、改、查,从存储角度考虑,这两种数据结构是非常优秀的。但是HashMap还是有自己的局限性----**它不具备统计性能,或者说它的统计性能时间复杂度并不是很好才更准确,所有的统计必须遍历所有Entry,因此时间复杂度为O(N)**。比如Map的Key有1、2、3、4、5、6、7,我现在要统计: 1. 所有Ke...

weixin_33188832的博客 174

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

java集合图解源码系列【2】:从二叉树讲到TreeMap,一篇搞明白树的数据结构

大家好!我是未来村村长,就是那个“请你跟我这样做,我就跟你这样做!”的村长👨‍🌾!

农夫的码,没有草原 2015

TreeSet/TreeMap的码源分析:二叉树(中序排序)如何排序的?

以下为个人见解,如有错误,欢迎指正。 TreeSet的底层是TreeMap,TreeMap的底层是二叉树数据结构。TreeSet/TreeMap可以对元素按照大小自动排序。 二叉树排序有三种: 前序排序:根左右 中序排序:左根右 后序排序:左右根 TreeSet/TreeMap是采用中序排序。 在【TreeMap】码源有二叉树的节点有5个属性。在【TreeMap】源码中可以找到。 key,value,left:左节点,right:右节点,parent:父节点。 【TreeSet对Integer类的数

hqqkkc的博客 459

重温数据结构:平衡二叉树(AVL树)、红黑树、TreeSet与TreeMap

写作目的:本博客的目的是认识和复习数据结构中的平衡二叉树和红黑树,以及由红黑树实现的TreeSet和TreeMap1.二叉搜索树的弊端二叉搜索树的查找,插入,删除的复杂度等于树的高度,时间复杂度是O(log(n)).但是,对于同一组数据,插入顺序的不同,可能会导致二叉搜索树的高度不同。如果是有序插入,二叉搜索树退化成链表,其查找的时间复杂度退化为O(log(n)).图 插入顺序不同对二叉搜索树的影

郑海波(莫川)的优快云博客 5125

Java源码集合类TreeMap学习1——数据结构3二叉树创建代码

二叉树的二叉链表存储结构 二叉树的二叉链表存储结构,一个结点结构包含三个域:数据域、左、右指针域。如下图所示。 二叉树的遍历知识参考:http://blog.youkuaiyun.com/fansongy/article/details/6798278/ 二叉树的二叉链表存储表示的代码如下。 //Tree.cpp #include #include #define OK 1 #defin

Fish的专栏 676

映射表map(平衡二叉树实现)_手动实现Java集合容器之TreeMap(上)

上一篇我们手写了HashMap,还有一个很重要的Map的实现类TreeMap。打开源码第一句话:* A Red-Black tree based {@link NavigableMap} implementation.TreeMap是一个基于红黑树的实现。对红黑树没有了解怎么办,那就先搞清楚红黑树的原理。只要理解红黑树的玩法,TreeMap实现起来就没有那么大的难度了。红黑树(Red Black ...

weixin_39663378的博客 195

java TreeMap 源代码分析 平衡二叉树

TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点。 TreeSet 和 TreeMap 的关系 为了让大家了解 TreeMap 和 TreeSet 之间的关系,下面先看 TreeSet 类的部分源代码: public class TreeSet<E> extends AbstractSet<E&...

weixin_30618985的博客 79

java数据结构16_TreeMap底层源码实现(红黑二叉树)

本章节主要分析红黑树的“插入算法”和“获取算法”,也就是put()方法和get()方法的底层实现。 在学习TreeMap的put()方法之前,我们首先应该创建一个叶子节点Entry类,叶子节点Entry是TreeMap的内部类,它有几个重要的属性:节点的颜色、左子节点指针、右子节点指针、父节点指针、节点的值。 class MyTreeMap<K, V> { // 节点类 class ...

安德的博客 684

java容器之七_TreeMap与红黑二叉树

TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致还是叫做TreeMap比较好。通过这篇博文你可以获得如下知识点:        1、红黑树的基本概念。        2、红黑树增加节点、删除节点的实现过程。        3、红黑

活在当下 3032

黑马程序员_java TreeMap 源代码分析 平衡二叉树

这是在博客园看到的一篇文章,写的很详细,我连注释都没加几个,对二叉树感兴趣的可以看下。 TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点。 TreeSet 和 TreeMap 的关系 为了让大家了解 TreeMap 和 TreeSet 之间的关系,下面先看 TreeSet 类的部分源代码: publ

ml5210的博客 648

二叉树类图_Java Collections Framework 源码分析(5.1 -TreeMap, 红黑树)

Java Collections Framework 源码分析(5.1 - Map, TreeMap, 红黑树)Map 在 Java Collections Framework 中设计相关知识点比较多的数据结构,无论是工作还是面试中都会被频繁的涉及到。通过学习 Map 的源码,我们能够深入理解相当部分的数据结构知识和编码技巧。在接下来的几篇文章中会介绍一些数据结构的知识,希望大家不会觉得无聊,因为...

weixin_42414947的博客 212
上一篇: synchronized同步代码块
下一篇: Java网络编程 - 认识socket
学习笔记666
博客等级 码龄12年 1047粉丝 1369原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值