学习JavaEE日子 Day24 TreeSet,内置比较器,外置比较器,HashMap

Day24 TreeSet

1.TreeSet

1.1 TreeSet的使用

注意:TreeSet的使用和HashSet一样

public class Test01 {public static void main(String[] args) {//创建TreeSet集合的对象TreeSet<String> set = new TreeSet<>();//添加元素set.add("麻生希");set.add("椎名空");set.add("水菜丽");set.add("朝桐光");set.add("三上悠亚");set.add("水野朝阳");set.add("古川伊织");set.add("xxx");set.add("yyy");set.add("zzz");//获取元素个数int size = set.size();System.out.println("获取元素个数:" + size);//10TreeSet<String> newSet1 = new TreeSet<>();Collections.addAll(newSet1, "aaa","bbb","ccc","ccc");//利用Collections工具类给集合做批量添加set.addAll(newSet1);//将newSet1中所有的元素添加到set集合的末尾//清空集合中所有的元素//set.clear();System.out.println("判断集合中是否包含指定元素:" + set.contains("王益升"));//trueSystem.out.println("判断集合中是否包含子集合中所有的元素:" + set.containsAll(newSet1));//trueSystem.out.println("判断集合中是否没有元素:" + set.isEmpty());//falseset.remove("朝桐光");//根据元素删除元素set.removeAll(newSet1);//删除set中包含newset1的元素(去除交集)TreeSet<String> newSet2 = new TreeSet<>();Collections.addAll(newSet2, "xxx","yyy","zzz","zzz");//利用Collections工具类给集合做批量添加set.retainAll(newSet2);//保留set中包含newset2的元素(保留交集)//将集合转成数组Object[] objs = set.toArray();System.out.println(Arrays.toString(objs));//将集合转成数组String[] ss = new String[set.size()];set.toArray(ss);System.out.println(Arrays.toString(ss));System.out.println("--------------------------------");//遍历数据 -- foreachfor (String element : set) {System.out.println(element);}System.out.println("--------------------------------");//遍历数据 -- IteratorIterator<String> it = set.iterator();while(it.hasNext()){//判断是否有可迭代的元素String element = it.next();//返回下一个元素System.out.println(element);}}
}

1.2 TreeSet的特点 – 自然排序

理解:TreeSet会根据元素类型的不同自动选择排序规则

TreeSet存储Integer的排序规则:数字升序

TreeSet存储String的排序规则:字典排序

public class Test02 {public static void main(String[] args) {//TreeSet存储Integer的排序规则:数字升序TreeSet<Integer> set1 = new TreeSet<>();set1.add(30);set1.add(10);set1.add(50);set1.add(40);set1.add(20);for (Integer element : set1) {System.out.println(element);}System.out.println("---------------------------");//TreeSet存储String的排序规则:字典排序TreeSet<String> set2 = new TreeSet<>();set2.add("b");set2.add("d");set2.add("a");set2.add("c");set2.add("ad");set2.add("ab");set2.add("ac");for (String element : set2) {System.out.println(element);}		}
}

1.3 研究内置比较器的使用 – Comparable

需求:创建学生类,将学生类的对象添加到TreeSet中

public class Test03 {public static void main(String[] args) {TreeSet<Student> set = new TreeSet<>();set.add(new Student("麻生希", '女', 27, "2401", "001"));        set.add(new Student("椎名空", '女', 23, "2401", "002"));        set.add(new Student("水菜丽", '女', 21, "2401", "003"));        set.add(new Student("朝桐光", '女', 31, "2401", "004"));        set.add(new Student("北岛玲", '女', 36, "2401", "005"));        set.add(new Student("樱井步", '女', 29, "2401", "006"));        set.add(new Student("爱田奈奈", '女', 32, "2401", "007"));       set.add(new Student("水野朝阳", '女', 31, "2401", "008"));       set.add(new Student("古川伊织", '女', 27, "2401", "009"));       set.add(new Student("巴得伟", '男', 21, "2401", "010"));        set.add(new Student("李星乐", '男', 20, "2401", "011"));        set.add(new Student("北条麻衣", '女', 34, "2402", "001"));       set.add(new Student("濑亚美莉", '女', 23, "2402", "002"));       set.add(new Student("三上悠亚", '女', 21, "2402", "003"));       set.add(new Student("小西满里惠", '女', 31, "2402", "004"));      set.add(new Student("桃谷绘里香", '女', 27, "2402", "005"));      set.add(new Student("铃原爱蜜莉", '女', 23, "2402", "006"));      set.add(new Student("明日花绮罗", '女', 28, "2402", "007"));      set.add(new Student("京香Julia", '女', 34, "2402", "008"));    set.add(new Student("巴得伟", '男', 18, "2402", "009"));        set.add(new Student("张海杰", '男', 20, "2402", "010"));        for (Student stu : set) {System.out.println(stu);}}
}
public class Student implements Comparable<Student>{//要实现Comparable<Student>private String name;private char sex;private int age;private String classId;private String id;//无参构造,有参构造,get/set方法省略//判断两个学生是否相同//比较规则:班级号+学号@Overridepublic boolean equals(Object obj) {if(this == obj){return true;}if(obj instanceof Student){Student stu = (Student) obj;if(this.classId.equals(stu.classId) && this.id.equals(stu.id)){return true;}}return false;}@Overridepublic String toString() {return name + "\t" + sex + "\t" + age + "\t" + classId + "\t" + id;}//排序规则:按照年龄排序@Overridepublic int compareTo(Student o) {//this表示添加到TreeSet中的学生对象//o表示TreeSet中的学生对象return this.age - o.age;}
}

1.4 研究外置比较器的使用 – Comparator

需求:将学生类的对象添加到TreeSet中

场景 - 联合开发:

1.Student类是小伟开发的

2.小李要把Student类的对象添加到TreeSet中,但是Student的排序规则不满足小李的需求

3.小李想的是按照名字长度排序,长度一致按照年龄排序

比较器的优先级别:外置比较器 > 内置比较器

public class Test04 {public static void main(String[] args) {//扩展:new Comparator 匿名内部类的使用场景!!!TreeSet<Student> set = new TreeSet<>(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {if(o1.equals(o2)){return 0;}int nameLen1 = o1.getName().length();int nameLen2 = o2.getName().length();if(nameLen1 != nameLen2){//return nameLen1 - nameLen2;return Integer.compare(nameLen1, nameLen2);}int age1 = o1.getAge();int age2 = o2.getAge();if(age1 != age2){return Integer.compare(age1, age2);}return 1;}});set.add(new Student("麻生希", '女', 27, "2401", "001"));        set.add(new Student("椎名空", '女', 23, "2401", "002"));        set.add(new Student("水菜丽", '女', 21, "2401", "003"));        set.add(new Student("朝桐光", '女', 31, "2401", "004"));        set.add(new Student("北岛玲", '女', 36, "2401", "005"));        set.add(new Student("樱井步", '女', 29, "2401", "006"));        set.add(new Student("爱田奈奈", '女', 32, "2401", "007"));       set.add(new Student("水野朝阳", '女', 31, "2401", "008"));       set.add(new Student("古川伊织", '女', 27, "2401", "009"));       set.add(new Student("巴得伟", '男', 21, "2401", "010"));        set.add(new Student("李星乐", '男', 20, "2401", "011"));        set.add(new Student("北条麻衣", '女', 34, "2402", "001"));       set.add(new Student("濑亚美莉", '女', 23, "2402", "002"));       set.add(new Student("三上悠亚", '女', 21, "2402", "003"));       set.add(new Student("小西满里惠", '女', 31, "2402", "004"));      set.add(new Student("桃谷绘里香", '女', 27, "2402", "005"));      set.add(new Student("铃原爱蜜莉", '女', 23, "2402", "006"));      set.add(new Student("明日花绮罗", '女', 28, "2402", "007"));      set.add(new Student("京香Julia", '女', 34, "2402", "008"));    set.add(new Student("巴得伟", '男', 18, "2402", "009"));        set.add(new Student("张海杰", '男', 20, "2402", "010"));        for (Student stu : set) {System.out.println(stu);}}
}

小结:比较器接口

作用:排序时使用

分类:

​ 内置比较器:Comparable - compareTo()

​ 外置比较器:Comparator - compare()

使用场景:

​ 内置比较器:对象要想存入TreeSet、TreeMap中,对象所属的类必须要实现内置比较器

​ 外置比较器:当内置比较的规则不满足现在的需求,但又不能改动内置比较器规则时

优先级别:外置比较器 > 内置比较器

2.HashMap

在这里插入图片描述

2.1 HashMap的使用

public class Test01 {public static void main(String[] args) {HashMap<String, Integer> map = new HashMap<>();//添加元素map.put("麻生希", 27);map.put("椎名空", 23);map.put("水菜丽", 28);map.put("朝桐光", 36);map.put("爱田奈奈", 32);map.put("水野朝阳", 28);map.put("波多野结衣", 28);//将newMap中所有的元素添加到map集合中HashMap<String, Integer> newMap = new HashMap<>();newMap.put("aaa", 10);newMap.put("bbb", 20);newMap.put("ccc", 30);newMap.put("ddd", 40);map.putAll(newMap);//如果key存在就获取value值,如果不存在就添加Integer putIfAbsent = map.putIfAbsent("麻生希111", 28);System.out.println("putIfAbsent:" + putIfAbsent);//通过Key获取到对应的ValueInteger integer1 = map.get("水菜丽");System.out.println("通过Key获取对应的value:" + integer1);//28//通过Key获取对应的value,如果key不存在则返回默认值Integer integer2 = map.getOrDefault("麻生希111", 888);System.out.println("通过Key获取对应的value:" + integer2);//888//清空集合中的元素//map.clear();System.out.println("判断集合中是否有指定的key:" + map.containsKey("麻生希"));//trueSystem.out.println("判断集合中是否有指定的value:" + map.containsValue(27));//trueSystem.out.println("判断集合中是否没有元素:" + map.isEmpty());//false//通过key删除映射关系(key+value)map.remove("aaa");//通过key+value删除映射关系(key+value)map.remove("bbb", 20);//通过key替换valuemap.replace("麻生希", 30);//通过key+value替换valuemap.replace("椎名空", 23, 25);//获取映射关系的个数(映射关系内包含了key和value)int size = map.size();System.out.println("获取映射关系的个数:" + size);//10//获取map中所有的valueCollection<Integer> values = map.values();System.out.println(Arrays.toString(values.toArray()));//将集合转换为数组,再将数组转换为字符串System.out.println("-----------------------");//遍历 -- keySet()//思路:获取map集合中所有的key放在一个Set集合中,遍历Set集合获取出key,再通过key获取到Map集合中对应的valueSet<String> keySet = map.keySet();for (String key : keySet) {Integer value = map.get(key);System.out.println(key + " -- " + value);}System.out.println("-----------------------");//遍历 -- entrySet()//思路:获取map集合中所有的映射关系对象放在一个Set集合中,遍历Set集合获取出映射关系对象(Key+Value)Set<Entry<String,Integer>> entrySet = map.entrySet();for (Entry<String, Integer> entry : entrySet) {String key = entry.getKey();Integer value = entry.getValue();System.out.println(key + " -- " + value);}}
}

2.2 HashMap的注意事项

注意:put方法即使添加也是替换

public class Test02 {public static void main(String[] args) {HashMap<String, Integer> map = new HashMap<>();		//put第一次添加数据,返回为nuullInteger put1 = map.put("麻生希", 27);Integer put2 = map.put("椎名空", 23);Integer put3 = map.put("水菜丽", 28);System.out.println("put1:" + put1);//nullSystem.out.println("put2:" + put2);//nullSystem.out.println("put3:" + put3);//null//使用put添加数据,如果map中有key,就替换value值,返回被替换的值Integer put4 = map.put("水菜丽", 29);System.out.println("put4:" + put4);//28//遍历 -- entrySet()//思路:获取map集合中所有的映射关系对象放在一个Set集合中,遍历Set集合获取出映射关系对象(Key+Value)Set<Entry<String,Integer>> entrySet = map.entrySet();for (Entry<String, Integer> entry : entrySet) {String key = entry.getKey();Integer value = entry.getValue();System.out.println(key + " -- " + value);}	}
}

2.3 针对于HashMap的value排序

1.将map的映射关系对象取出,返回Set集合

2.将Set集合转换为ArrayList集合

3.利用ArrayList的sort方法去排序

public class Test03 {public static void main(String[] args) {HashMap<String, Integer> map = new HashMap<>();		map.put("麻生希", 27);map.put("椎名空", 23);map.put("水菜丽", 28);map.put("朝桐光", 36);map.put("爱田奈奈", 32);map.put("水野朝阳", 28);map.put("波多野结衣", 28);//将map的映射关系对象取出,返回Set集合Set<Entry<String,Integer>> entrySet = map.entrySet();//将Set集合转换为ArrayList集合ArrayList<Entry<String,Integer>> list = new ArrayList<>(entrySet);//利用ArrayList的sort方法去排序list.sort(new Comparator<Entry<String,Integer>>() {@Overridepublic int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {Integer v1 = o1.getValue();Integer v2 = o2.getValue();return Integer.compare(v1, v2);}});//遍历ArrayListfor (Entry<String, Integer> entry : list) {System.out.println(entry);}	}
}

2.4 HashMap的特点

注意:

1.HashMap的key不允许重复,Key是唯一的

2.HashMap的value允许重复

HashMap的特点:无序 + key去重

public class Test04 {public static void main(String[] args) {HashMap<String, Integer> map = new HashMap<>();		map.put("麻生希", 27);map.put("椎名空", 23);map.put("北岛玲", 23);map.put("水菜丽", 28);map.put("水菜丽", 29);map.put("水菜丽", 30);Set<Entry<String,Integer>> entrySet = map.entrySet();for (Entry<String, Integer> entry : entrySet) {System.out.println(entry);}}
}

总结

1.TreeSet
使用
特点(TreeSet的排序规则是怎样实现的 – 思想)
内置比较器
外置比较器

2.HashMap
使用
注意事项
面试题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/731073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习-可解释性机器学习:随机森林与fastshap的可视化模型解析

一、引言 机器学习在当今社会扮演着日益重要的角色&#xff0c;但黑盒模型的不可解释性限制了其应用范围。因此&#xff0c;可解释性机器学习成为研究热点&#xff0c;有助于提高模型的可信度和可接受性。本文旨在探讨随机森林和fastshap作为可视化模型解析工具的应用&#xff…

【生态适配】亚信安慧AntDB数据库与OpenCloudOS、TencentOS Server五款产品完成兼容互认

日前&#xff0c;亚信安慧AntDB数据库与OpenCloudOS8、OpenCloudOS9、TencentOS Server 2、TencentOS Server 3、TencentOS Server 4五款操作系统完成兼容互认。经过严格测试&#xff0c;亚信安慧AntDB数据库与这五款操作系统兼容良好&#xff0c;整体运行稳定。 图1&#xff1…

在Anaconda3的conda中创建虚拟环境下载opencv

opencv下载全流程 一、下载Anaconda 记得从官方网格站进行下载&#xff0c;会有一些慢 下载后进行配置 b站讲解视频&#xff08;非本人&#xff08;平台大神讲解&#xff09;&#xff09; 二、打开conda控制台 这里的两个都可以进行下载 通常我们受用anaconda prompt 三、…

数字人ai直播软件突破AI大模型技术,改变未来科技格局!

数字人AI直播软件在AI大模型技术上的突破&#xff0c;将不可避免地改变未来科技格局。这一突破让人们看到了AI技术的无限可能性&#xff0c;并为未来的科技发展打开了新的大门。 AI大模型技术是近年来人工智能领域的一个热点&#xff0c;它通过构建庞大、复杂的神经网络模型&a…

【AI视野·今日NLP 自然语言处理论文速览 第八十四期】Thu, 7 Mar 2024

AI视野今日CS.NLP 自然语言处理论文速览 Thu, 7 Mar 2024 Totally 52 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers The Heuristic Core: Understanding Subnetwork Generalization in Pretrained Language Models Authors Adith…

PostgreSQL容器安装

docker中的centos7中安装 选择对应的版本然后在容器中的centos7中执行下面命令 但是启动容器的时候需要注意 开启端口映射开启特权模式启动init进程 docker run -itd --name centos-postgresql -p 5433:5432 --privilegedtrue centos:centos7 /usr/sbin/init 启动然后进入后先…

JAVA实战开源项目:生活废品回收系统(Vue+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 资源类型&资源品类模块3.3 回收机构模块3.4 资源求购/出售/交易单模块3.5 客服咨询模块 四、免责说明 一、摘要 1.1 项目介绍 生活废品回收系统是可持续发展的解决方案&#xff0c;旨在鼓…

CQBW(服务器部分)

计算检材 4-A.rar 的 MD5(128bit)校验值。&#xff08;答案格式: 字母大写&#xff09; 请写出镜像中系统&#xff08;用户名: root 密码: btLUN5Tb)的操作系统版本名称;&#xff08;答案格式: redhat; 小写、不带空格、特殊字符及版本号&#xff09; 也可以仿真来看 sed -i s…

HarmonyOS 数据持久化 关系型数据库之 初始化操作

上文 HarmonyOS 数据持久化之首选项 preferences 我们有说用户首选项 但它只能处理一些比较简单的数据类型结构 的持久化处理 如果是一些批量较大 结构较为复杂的数据结构 那么 首选项就无法满足了 我们就要选择 关系型数据库 通过 SQLite 组件实现的一种本地数据库&#xff0…

10 事务控制

文章目录 事务控制事务概述事务操作事务四大特性事务隔离级别 事务控制 事务概述 MySQL 事务主要用于处理操作量大&#xff0c;复杂度高的数据。比如说&#xff0c;在人员管理系统中&#xff0c;你删除一个人员&#xff0c;既需要删除人员的基本资料&#xff0c;也要删除和该…

校园生活信息平台:Java+Vue+MySQL全栈实践

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Mint_21.3 drawing-area和goocanvas的FB笔记(五)

FreeBASIC SDL图形功能 SDL - Simple DirectMedia Layer 是完整的跨平台系统&#xff0c;有自己的窗口、直接捕获键盘、鼠标和游戏操纵杆的事件&#xff0c;直接操作音频和CDROM&#xff0c;在其surface上可使用gfx, openGL和direct3D绘图。Window3.0时代&#xff0c;各种应用…

Webpack常用配置及作用

一 、 二、 三、 四、 五、 六、 七、 八、

防御保护--IPSEC VPPN实验

实验拓扑图 实验背景&#xff1a;FW1和FW2是双机热备的状态。 实验要求&#xff1a;在FW5和FW3之间建立一条IPSEC通道&#xff0c;保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 IPSEC VPPN实验配置&#xff08;由于是双机热备状态&#xff0c;所以FW1和FW2只需要配置FW1…

LLM 构建Data Muti-Agents 赋能数据分析平台的实践之①:数据采集

一、 概述 在推进产业数字化的过程中&#xff0c;数据作为最重要的资源是优化产业管控过程和提升产业数字化水平的基础一环&#xff0c;如何实现数据采集工作的便利化、高效化、智能化是降低数据分析体系运转成本以及推动数据价值挖掘体系的基础手段。随着数字化在产业端的推进…

UDP实现文件的发送、UDP实现全双工的聊天、TCP通信协议

我要成为嵌入式高手之3月7日Linux高编第十七天&#xff01;&#xff01; ———————————————————————————— 回顾 重要程序 1、UDP实现文件的发送 发端&#xff1a; #include "head.h"int main(void) {int sockfd 0;struct sockaddr_i…

LeetCode-102.题: 二叉树的层序遍历(原创)

【题目描述】 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 【题目链接…

Apache服务的搭建与配置

一、apache安装 systemctl stop firewalldsystemctl disable firewalldsetenforce 0yum -y install httpdsystemctl start httpdnetstat -ntlp | grep 80 二、认识主配置文件 # vim /etc/httpd/conf/httpd.conf ServerRoot "/etc/httpd" #定义工作目…

【CSP试题回顾】202109-1-数组推导

CSP-202109-1-数组推导 解题代码 #include<iostream> #include<vector> #include<algorithm> using namespace std;long long maxSum, minSum;int main() { int n;cin >> n;vector<int>B(n);for (auto& it : B){cin >> it;maxSum …

HNU-计算机网络-甘晴void学习感悟

前言 计算机网络其实我没太学懂&#xff0c; 仅从应试来说&#xff0c;考试成绩也不太好。 这也是为什么一直没有更新这一学科的学习感悟。 大三下还是有点闲&#xff0c;一周三天小长假&#xff0c;闲来无事还是给写了。 教材使用这本&#xff1a; 总领 期中考试 30% 期…