黑马程序员_日记59_TreeMap自定义对象练习

GB 47955—2026 L2组合驾驶辅助强制国标全解、合规方案与工程代码落地 GB 47955—2026 L2辅助驾驶国标合规工程代码# 运行环境:Python3.8+,适配车载仿真、台架测试、算法验证场景# 依赖安装:pip install numpy dataclasses tqdm struct time json# ===================== 国标强制时序参数(完全对标GB 47955—2026) =====================HAND_OFF_FIRST_WARN = 5.0 # 手部脱离5s触发一级预警。 阅读详情

 ——- android培训、java培训、期待与您交流! ———-

TreeMap自定义对象存取练习

需求:

每一个学生都有对应的归属地。
学生Student,地址String。
学生属性:姓名,年龄。
注意:姓名和年龄相同的视为同一个学生。
保证学生的唯一性。
对学生对象的年龄进行升序排序,用Comparable实现;
对学生的姓名进行字典序排序,用Comparator实现。

因为数据是以键值对形式存在的。
所以要使用可以排序的Map集合。TreeMap。

思路:

1 把学生属性存入学生对象,并抽象出学生类
2 创建TreeMap容器,并把学生对象存入
3 取出学生
4 创建比较器类并测试按姓名字典序排序

在写学生类要注意的地方:

1 实现Comparable接口,覆盖compareTo方法
2 去重,计算哈希值,覆盖hashCode和equals方法
3 覆盖toString方法
4 记得写全set ,get方法

源代码

import java.util.*;
//主类
public class TreeMapTest
{
    public static void sop(Object obj)
    {
        System.out.println(obj);
    }

    public static void main(String[] args)
    {
        //1 创建TreeMap映射对象
        //TreeMap<Student,String> tm = new TreeMap<Student,String>(new StuNameComparator());//姓名字典序排序
        TreeMap<Student,String> tm = new TreeMap<Student,String>();//年龄升序排序

        //2 添加Student对象
        tm.put(new Student("Jack",25),"北京");
        tm.put(new Student("Jack",22),"北京");
        tm.put(new Student("Mike",22),"天津");
        //sop(tm.put(new Student("Mike",22),"淮南"));//注意了,如果Student相同,但是地址不相同,根据put方法,新地址会覆盖原来的地址
        tm.put(new Student("Jimmy",21),"上海");
        tm.put(new Student("Jakie",20),"广州");
        tm.put(new Student("David",17),"长沙");
        tm.put(new Student("Tom",26),"连云港");

        //第一种方式取出所有键值
        sop("第一种方式取出所有键值");
         getWay(tm);

        //第二种方式取出所有键值
        //sop("第二种方式取出所有键值");
         //getWay_2(tm);
    }

    //第一种方式迭代取出所有键值
    public static void getWay(TreeMap<Student,String> tm)
    {
        //1 把所有key存入set
        Set<Student> keySet = tm.keySet();

        //2 获取迭代器
        for(Iterator<Student> it = keySet.iterator(); it.hasNext(); )
        {
            //3 迭代取出key
            Student stu = it.next();
            //4 通过key获取value
            String addr = tm.get(stu);

            //打印取出结果
            sop(stu.toString()+".........."+addr);
        }
    }

    //第二种方式迭代取出所有键值
    public static void getWay_2(TreeMap<Student,String> tm)
    {
        //1 把所有映射项存入Map.Entry
        Set<Map.Entry<Student,String>> entry = tm.entrySet();

        //2 获取迭代器
        for(Iterator<Map.Entry<Student,String>> it = entry.iterator(); it.hasNext(); )
        {
            //3 迭代取出映射项
            Map.Entry<Student,String> me = it.next();

            //4 利用Map.Entry中的get方法获取key和value
            Student stu = me.getKey();
            String addr = me.getValue();

            //5打印取出结果
            sop(stu.toString()+"***********"+addr);
        }
    }
}

//学生姓名比较器类
class StuNameComparator implements Comparator<Student>
{
    //覆盖compare方法
    public int compare(Student stu1,Student stu2)
    {
        //先按姓名排序,如果相同再按年龄升序排序
        int num = stu1.getName().compareTo(stu2.getName());

        if(num == 0)
            return new Integer(stu1.getAge()).compareTo(new Integer(stu2.getAge()));

        //否则就按按姓名排序
        return  num;
    }
}


//学生类
class Student implements Comparable<Student>
{
    private String name;
    private int age;

    //构造函数初始化学生
    Student(String name,int age)
    {
        this.name = name;
        this.age = age;
    }

    public int compareTo(Student stu)
    {
        //按学生的年龄排序,如果年龄相等就按姓名字典序排序
        int num = new Integer(this.getAge()).compareTo(new Integer(stu.getAge()));

        if(num == 0)
            return this.getName().compareTo(stu.getName());

        //否则就按年龄排序
        return num;
    }

    //计算学生对象的哈希地址
    public int hashCode()
    {
        return name.hashCode()+age*37;
    }

    public boolean equals(Object obj)
    {
        //如果不是学生对象,抛出类型转换异常
        if(!(obj instanceof Student))
            throw new ClassCastException("不能转换成Student类型");

        //类型转换
        Student stu = (Student)obj;

        //比较学生对象姓名和年龄,去除重复元素
        return this.getName().equals(stu.getName()) && this.getAge()==stu.getAge();
    }

    public void setName(String name)
    {
        this.name =name;
    }

    public String getName()
    {
        return name;
    }

    public void setAge(int age)
    {
        this.age = age;
    }

    public int getAge()
    {
        return age;
    }

    public String toString()
    {
        return name+"....."+age;
    }
}

注意

以下操作均在主类的主函数进行。

如果想要第一种或者第二种方式迭代取出所有键值,请打开或者关闭对于注释语句。

这里写图片描述

如果想按姓名字典序排序,请打开对应语句,并关闭按年龄升序排序语句;

这里写图片描述

如果想按年龄升序排序,请打开对应语句,并关闭姓名字典序排序。

这里写图片描述

当存入重复的学生,不同的地址时候,put方法会返回被覆盖的地址

这里写图片描述

基于Simulink的永磁同步电机三闭环(位置/速度/电流)控制仿真 本文详细介绍了基于Simulink的永磁同步电机三闭环控制系统设计与实现方法。系统采用位置环、速度环、电流环的三层嵌套结构,通过坐标变换(Clark/Park)实现解耦控制,达到精密定位目的。文章包含完整的建模步骤:从主电路搭建、三环PID设计到坐标变换与SVPWM调制实现,并提供了核心控制算法的MATLAB代码。通过工业机械臂关节场景验证,系统在阶跃响应(稳态误差0.002°)、正弦跟踪(误差0.008°)和抗扰动性能(恢复时间0.05s)方面表现优异。最后还提出了前馈补偿、扰动观测器等优化方向。该方案适 阅读详情

相关推荐

那些年对支付宝的研究[整理]

支付宝功能强大.他内部各个功能间的跳转是通过Uri 实现的.而使用window.location.href 即可.跟浏览器一样的协议.很方便 H5启动支付宝: alipays://platformapi/startapp?appId=20000067&url=网址 alipays://platformapi/startapp?appId=20000691&url=网址 ali...

技术专研 8915

模拟使用map进行学生信息(学号、姓名、性别、年龄、专业)存储,key值是学生的学号,value值是对应学生的信息,要求此map中保存的数据根据学号自动升序排序。

模拟使用map进行学生信息(学号、姓名、性别、年龄、专业)存储,key值是学生的学号,value值是对应学生的信息,要求此map中保存的数据根据学号自动升序排序。 package com.zut.Nove; import java.util.*; public class MapStudent { int no; String name; String sex; int age; String profession; public MapStudent(int no, String name, Strin

qq_43433537的博客 2550

Android真机调试——ADB调试(含华为手机无法找到设备)

本文以Huawei Nova7为例。

lianqi2003的博客 7856

Treemap

TreeMap可以默认按照key排序

m0_62478418的博客 687

快速上手CH340N电路设计(CH340N USB转串口模块 USB Type-C接口 CH340系列芯片讲解)

一、上模块 二、功能分析 l 芯片:CH340N l 输入接口:USB、TYPE-C l 输出接口:TTL(5V\3.3V\GND\TX\RX) l 指示灯:电源、TX、RX 三、CH340x芯片 l CH340 是一个 USB 总线的转接芯片,实现 USB 转串口 l 全速 USB 设备接口,兼容 USB V2.0 l 硬件全双工串口,内置收发缓冲区,支持通讯波特率 50bps~2Mbps l 支持常用的 MODEM 联络信号 RTS、DTR、DCD、RI、DS...

东小东博客 5万+

YOLOv8n模型导出ONNX的避坑指南:解决版本差异,正确生成TensorRT/RKNN所需输出节点

本文详细介绍了YOLOv8n模型导出ONNX格式的实战避坑指南,涵盖版本差异处理、代码修改技巧及TensorRT/RKNN部署优化方案。针对不同推理框架需求,提供输出节点生成、动态轴处理和后处理划分等核心问题的解决方案,帮助开发者高效完成模型部署。

weixin_33247358的博客 357

Java 用TreeMap 储存自定义对象 并按名称排序

package Map.Demo; import TreeSet.*; import java.util.Iterator; import java.util.Map; import java.util.TreeMap; public class TreeMapDemo { public static void main(String[] args) { /* * 将学生对象和学

Aseveng的博客 1534

iTerm2+oh-my-zsh最全配置

iTerm2+oh-my-zsh最全配置安装前先看效果图一.安装[iTem2](https://iterm2.com/)二.安装[oh-my-zsh](https://ohmyz.sh/)三.安装[Powerline](https://powerline.readthedocs.io/en/latest/installation.html)四.安装 [Meslo](https://github.com/powerline/fonts) 字体库五.安装agnoster主题六.安装语法高亮七.安装代码补全插件八

xinximo的博客 2610

Java程序设计综合练习题(期末考试)

一:判断题 1:如果使用import语句引入了整个包中的类,那么可能会增加编译时间。但绝对不会影响程序运行的性能,因为当程序执行时,只是将真正使用的类的字节码文件加载到内存。 (T) 2:一个数组可以存放许多不同类型的数值。 (F)    3:设String对象s="Hello ",运行语句System.out.println(s.concat("World!"));后String对象s的内...

张蔡辉 3万+

【保姆级教程】YOLOv8_Pose多目标+关键点检测:训练自己的数据集

【保姆级教程】YOLOv8_Pose多目标+关键点检测:训练自己的数据集

m0_51579041的博客 1万+

一文搞懂电流、电压的有效值 RMS

交流电有正半周、负半周,直接平均可能抵消成 0,但负半周一样会发热。这个交流电如果换成直流电,能产生同样发热功率时,对应的直流电压或电流”,电容耐压通常不能按 220V 选,常见会选 400V 或更高余量。所以做硬件时,220VAC 整流滤波后电容上会接近。电压/电流的有效值,也叫。如果它加在电阻上,发热按。

qq_52293640的博客 448

Java编程拾遗『TreeMap』

通过之前两节的讲述,相信对二叉树、以及红黑树有了初步的认识。本篇文章来讲述一下基于红黑树实现的Map—TreeMap。之前介绍HashMap时,我们都知道,HashMap键值对之间没有特定的顺序。结合之前讲的红黑树特点,我们也可以猜测到,TreeMap是可以保证键值对之间的顺序的。 TreeMap继承了AbstractMap抽象类,实现了NavigableMap、Cloneable、Seria...

卓立的博客 494

vue2/3 - element表格组件el-table实现懒加载树型(上下级)数据、默认展开和隐藏层级,支持对表格进行修改|新增|删除,解决完成操作后树节点不刷新问题(提供示例代码,一键复制开箱即用

vue2,vue3,elementui,elementPlus,el-table,Table表格组件,表格懒加载数据,element table表格数中的树形结构懒加载,增加后数据不同步更新问题,el-table树形与el-tree树形结构的一键折叠与展开,elementui中el-tree懒加载数据 默认展开最外层节点,Element-plus Table组件树表结构默认展开一级目录,vue实现element table表格树形结构-使用懒加载时-解决子节点增删改后,不刷新子节点数据问题,解决el-tre

✅ 精选推荐文章 1万+

java中treemap中的键值,用Java创建TreeMap并添加键值对

TreeMap不能包含重复的键。TreeMap不能包含null键。但是,它可以具有空值。首先让我们看看如何创建TreeMap-TreeMapm=newTreeMap();以键值对的形式添加一些元素-m.put(1,"India");m.put(2,"US");m.put(3,"Australia");m.put(4,"Netherlands");m.put(5,"Canada");以下是创...

weixin_31974443的博客 754

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

集合——使用TreeMap

我们已经知道,HashMap是一种以空间换时间的映射表,它的实现原理决定了内部的Key是无序的,即遍历HashMap的Key时,其顺序是不可预测的(但每个Key都会遍历一次且仅遍历一次)。 还有一种Map,它在内部会对Key进行排序,这种Map就是SortedMap。注意到SortedMap是接口,它的实现类是TreeMap。 SortedMap保证遍历时以Key的顺序来进行排序。例如,放入的Key是"apple"、“pear”、“orange”,遍历的顺序一定是"apple"、“orange”、“pea

weixin_46722612的博客 262

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

《黑马程序员》 TreeMap练习分析

public class TreeMapTest { /** * 每一个学生都有对应的归属地 学生Student, * 地址:String 学生属性:姓名和年龄 * 注意:姓名和年龄相同的视为同一个学生 保证学生的唯一性 * * 1,描述学生 2,定义map容器,将学生作为键,地址做为仁政,存入 3,获取map集合中的元素 * * 对集合中的年龄进行升序排序

青云志,我心不死,必度青天... 550

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

集合存储三个学生对象

创建一个存储学生对象的集合,存储3个学生对象,控制台遍历该集合打印结果 public class a_Arraylist { /* 分析: 1.定义一个学生类 2.创建集合对象 3.创建学生对象 4.添加学生对象到集合中 5.遍历集合,打印结果 */ public static void main(String[] args) { ArrayList&lt

多喝清晨的粥 1513

用java编写TreeMap<Student,String>集合,存储的元素按照年龄进行排序

package com.treemap; //创建一个学生类 public class Student implements Comparable{ private String name; private int age; //有参无参的构造 public Student() { super(); // TODO Auto-generated constructor st

zw_wen的博客 1118

java treemap用法_java中的TreeMap类使用实例解析

使用TreeMap类TreeMap类不仅实现了Map接口,还实现了Map接口的子接口java.util.SortedMap。由TreeMap类实现的Map集合,不允许键对象为null,因为集合中的映射关系是根据键对象按照一定顺序排列的,TreeMap类通过实现SortedMap接口得到的方法如表1所示。 表1TreeMap类通过实现java.util.SortedMap接口得到的方法在添加、删除和...

weixin_28818643的博客 922

黑马程序员_日记8_JavaSE阶段性习题练习及复习

——- android培训、java培训、期待与您交流! ———-JAVASE阶段性习题练习及复习这篇博客主要是把毕老师出的前四大练习题全部做了一遍,经我反复测试和修改后写得一些JAVASE基础总结。 练习一 已知学生成绩以100分为满分,共分5个等级:A,B,C,D,E。 90~100为等级A,80~89为等级B,70~79为等级C, 60~69为等级D,0~59为等级E。

itheima_1llt的专栏 3599

黑马程序员_日记27_JavaString类型的数字排序问题

——- android培训、java培训、期待与您交流! ———-输入一int型的数字字符串 用空格间隔,从小到大排序后,以字符串返回。 “12 0 99 -7 30 4 100 13” 要求对字符串中的数值进行排序。生成一个数值从小到大新字符串。“-7 0 4 12 13 30 99 100”分析: 1 用split方法把字符串切割成String[]类型的数组。 2 把String[]数组

itheima_1llt的专栏 2677

黑马程序员_日记25_Java两个字符串的最大相同子串

——- android培训、java培训、期待与您交流! ———-/* 获取两个字符串中最大相同子串。第一个动作:将短的那个串进行长度一次递减的子串打印。 "abcwerthelloyuiodef" "cvhellobnm"模拟一下: 第一趟: 最大子串:cvhellobnm ↑--------↑ 在长字符串中查找 abcwerthelloyuiodef ↑---

itheima_1llt的专栏 784

黑马程序员_日记26_Java字典序排序练习

——- android培训、java培训、期待与您交流! ———-对字符串中字符进行自然顺序排序。 例如,”vcz1bdAa+cs”–>abccdsvz 思路: 1 把字符串变成字符数组 2 对数组进行排序 3 找到字符数组中’a’第一次出现的位置找到 4 计算要转换的字符个数 5 把字符数组变成字符串import java.util.Arrays; class StringSortD

itheima_1llt的专栏 755

黑马程序员_日记33_Java迭代器基本使用

——- android培训、java培训、期待与您交流! ———-迭代器Iterator测试查阅API,得到迭代器的基本常识: 对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同: 迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection

itheima_1llt的专栏 747

黑马程序员_日记2--Java数组

——- android培训、java培训、期待与您交流! ———-数组复习总结一、数组的定义数组的概念所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序

itheima_1llt的专栏 716

黑马程序员_日记9_Java学习感言

——- android培训、java培训、期待与您交流! ———-学习感言原计划快速看一遍JAVASE视频复习一下,然后直接面试。但是从16号到今天,已经10天了,我才刚刚完成10天的学习。冷静下来,仔细想想还是方法有问题。前段时间听课都没有压力,也就没有经常动手练习,但是累积到做练习四的时候,才发现并不是很熟练,于是沉下心来花了2天的时间回头把所有的练习都不使用eclipse运行一遍,现在感觉基础

itheima_1llt的专栏 713
上一篇: 黑马程序员_日记58_HashMap自定义对象存取练习
下一篇: 黑马程序员_日记60_TreeMap字符串中字符出现次数练习
回到未来2020
博客等级 码龄12年 27粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值