Java集合(四)--treeset/treemap/章节练习题目/去重原理的解读和应用
文章目录
- 1.treeset结构
- 2.treemap结构
- 3.集合去重辨析总结
- 4.对于arraylist的练习题目
- 5.对于HashMap的练习题目
- 6.第三点的去重运用
- 7.HashSe练习题目
1.treeset结构
下面的这个就是对于这个treeset结构进行测试的一个程序,在这个里面,add表示的就是对于这个树上面进行元素的添加,打印的结果也是无序的;

我们之前进行这个集合选型介绍的时候,说过这个tree结构可以对于这个数据进行排序操作,这个想要实现排序的效果,需要我们自己手动传递进去一个比较器,我们上面的这个就是传递的一个匿名内部类,在这个匿名内部类里面,我们对于这个比较的规则进行了说明,上面的这个是return两个转换为这个string之后的长度相减,因此这个输出的结果就是按照长度进行排序的;
如果我们写成这个return (string) o1.compareTo((string) o2)这也写的话,就是按照这个字典序进行比较的,输出的结果也是我们的字母序的方式;
2.treemap结构
treemap是一个k-v的形式,我们想要实现这个排序的效果,也是需要对于这个里面的new对象的时候添加比较器的,我们下面的这个就是根据这个字典序进行比较,我们也可以根据上面的这个字符串的长度进行比较,也是可以的,只需要在这个对应的内部类里面进行修改就可以了;

下面的这个就是我们的源码里面具体是插入数据的过程:为什么这个不可以插入相同数据,主要就是我们的这个cmp是这个比较的返回值,当插入的这个key和这个已有的key一样的时候,就会cmp返回0,这样进行下面的这个分支判断的时候,就会进入这个else里面去,进而直接返回,这个就是插入相同内容不会打印的原因;
/** if (cpr != null) {* do {//下面的这个就是不断地进行遍历* parent = t;* //这个地方主要就是根据这个compare方法决定的* //进行下面的这个比较,==0的时候就会直接进入else,直接return操作* //主要是我们的main方法里面的这个compare方法是如何实现的* cmp = cpr.compare(key, t.key);* //下面的这个就是不断的寻找位置的过程* if (cmp < 0)* t = t.left;* else if (cmp > 0)* t = t.right;* else {* V oldValue = t.value;* if (replaceOld || oldValue == null) {* t.value = value;* }* return oldValue;* }* } while (t != null);* 上面第一次添加传进去的是两个一样的key,但是这个返回值不会被我们接受,* 这个主要是为了判断我们的这个数组是不是空的,如果是空的,这个compare方法* 里面就会抛异常*/
3.集合去重辨析总结
1.hashset和treeset是如何实现去重的?
hashset:使用的就是我们的hashcode()方法和这个equals()方法,首先使用这个hashcode()方法计算这个数据在数组里面插入到的位置的索引,也就是数组的下标,然后使用这个equals()方法,但是前提是这个位置有数据,如果这个数组对应的下标没有数据,这个时候就可以直接插入数据,但是如果有数据,我们需要使用这个equals方法判断我们插入的数据和已有的数据内容(或者是属性,这个比较是程序员进行重写的,不是固定的)是不是一样的,如果不是一样的就可以进行挂载(链表需要对于这个链表进行遍历–也就是一个一个的进行比较),否则无法进行插入(这个就是去重);
treeset:如果我们传递这个compaartor匿名对象(这篇文章的第二点就是这个场景的),就是用实现的这个compare方法进行去重(我们自己设计,根据内容或者是长度,或者是其他的),使用的这个compare方法如果返回的是0,说明是相同的元素(或者是数据),这个时候就不会被添加,
如果没有传递comparator对象,则以我们添加对象实现的comparable接口的compareTo方法(string.java文件)进行去重;字符串的compareTo方法就是比较的内容;
string实现comparable接口;
4.对于arraylist的练习题目

import java.util.ArrayList;
//这个主要是为了一直报警信息~~
@SuppressWarnings({"all"})
public class test {public static void main(String[] args) {//new出来一个arraylisy列表ArrayList arrayList = new ArrayList();//向这个列表里面添加内容,每一个内容都是一个新闻arrayList.add(new News("第一个新闻的主要的内容就是今天的天气很好,主要的内容就是今天的天气很好"));arrayList.add(new News("第二个新闻的主要的内容就是今天的天气很不不不不好,主要的内容就是今天的天气很好不"));//对于这个新闻内容进行遍历,使用这个size方法对于这个过程进行控制int size=arrayList.size();for(int i=size-1;i>=0;i--){//System.out.println(arrayList.get(i));//下面的这个是先得到我们的这个新闻对象,然后进行类型转换//这个主要是因为我们的这个get得到的列表类型的数据,需要转换为我们的自定义类型的对象News news = (News)arrayList.get(i);//下面的这个就是调用我们的成员方法对于这个新闻标题进行处理System.out.println(processTitle(news.getTitle()));}}//下面的这个就是对于我们的这个新闻的长度进行处理,如果大于15,我们就会调用这个sustring方法对于这个超出的部分使用...进行表示public static String processTitle(String title){if(title==null){return "";}if(title.length()>15){return title.substring(0,15)+".........";}else{return title;}}
}
@SuppressWarnings({"all"})
class News{private String content;private String title;
//根据题目的要求,只写一个参数进行构造public News(String title) {this.title = title;}
//下面的这个JavaBean都是根据我们的程序员变量自动生成的public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}
//根据题目的要求,重写这个里面的toString方法@Overridepublic String toString() {return "News{" +"title='" + title + '\'' +'}';}
}
5.对于HashMap的练习题目

package demo1;import java.util.*;@SuppressWarnings({"all"})
public class test {public static void main(String[] args) {//题目说了需要我们使用这个Map类型的对象,但是我的是使用Map类型的map代替了题目里面的这个m对象,就是换了名字Map map = new HashMap();//使用add方法往这个里面去添加元素map.put("jack",650);map.put("tom",1200);map.put("smith",2900);System.out.println("变化前的情况:");System.out.println(map);//我们插入相同的key但是不同的value就可以达到替换的效果System.out.println("替换为2600之后的情况:");map.put("jack",2600);System.out.println(map);Set set = map.keySet();for (Object key : set) {//这个地方需要进行向下转型map.put(key,(Integer)map.get(key)+100);}System.out.println("薪水加上100之后的情况:");System.out.println(map);System.out.println("=====迭代器while循环遍历员工=====");//entryset里面的每一个数据都是这个entry<k,v>这样的Set entryset = map.entrySet();Iterator iterator = entryset.iterator();while (iterator.hasNext()) {Map.Entry entry = (Map.Entry)iterator.next();System.out.println(entry.getKey()+"-"+entry.getValue());}System.out.println("======工资======");//得到每一组元素里面的value并且打印输出Collection values = map.values();for (Object value : values) {System.out.println(value);}}
}
6.第三点的去重运用
这个下面的案例算是对于上面的这个第三点的一个去重机制的一个运用吧,可能会帮助我们对于这个去重的原理更好的理解,包括这个里面用到的方法;
这个其实是一个题目,让我们进行判断这个代码会不会报错,这个就是创建了一个treeset,然后往这个里面去进行数据的添加,但是这个会报错:

其实这个主要原因就是我们的这个里面没有实现comparable接口:我们可以添加这个string对象进行调试,查看这个报错的位置,就是下面的这个1569行,因为这个需要被转换为comparable接口,进而调用这个里面的compareTo方法进行比较;

我们的string是常用类,默认是实现了这个方法的,因此我们把这个new Person()换成string字符串都不会报错,因为这个string就实现了我们的这个comparable接口,里面也是有这个方法的,但是我们自定义的这个类person没有实现这个接口,也没有这个方法;
我们的修改方法就是在这个Person类里面去实现这个接口重写这个compareTo方法,这样的话因为return 0,因此我们的这个set里面只能添加一个数据(根据这个去重的规则)返回0,说明每一次进行比较的时候都是一样的,肯定就添加不进去了;

7.HashSe练习题目

第一次我们的print:2个对象
第二次我们的print:3个对象
第三次我们的print:4个对象
第一次,第二次添加就是正常的,但是接下来对于这个p1.name进行了修改为CC,但是这个时候删除p1是无法成功的,因为根据我们的这个1011和CC会重新计算这个索引,和原来的位置肯定是不一样的;因此我们无法成功删除;
第二次添加这个这个1001和CC貌似和原来冲了,但是我们的这个索引一定和原来的不一样,因为原来的是根据这个1011和AA计算出来的,只不过后面修改为这个CC了,但是我们的这个是使用1011和CC计算的,索引肯定和他不一样,因此可以插入,这个时候打印就是3个对象;
第三次添加这个1011,和AA和第一次的这个位置一样,但是第一次的这个已经改为这个CC了,因此我们可以添加,挂载在1011,和CC的这个后面,像链表一样串联起来~~
法成功删除;
第二次添加这个这个1001和CC貌似和原来冲了,但是我们的这个索引一定和原来的不一样,因为原来的是根据这个1011和AA计算出来的,只不过后面修改为这个CC了,但是我们的这个是使用1011和CC计算的,索引肯定和他不一样,因此可以插入,这个时候打印就是3个对象;
第三次添加这个1011,和AA和第一次的这个位置一样,但是第一次的这个已经改为这个CC了,因此我们可以添加,挂载在1011,和CC的这个后面,像链表一样串联起来~~
相关文章:
Java集合(四)--treeset/treemap/章节练习题目/去重原理的解读和应用
文章目录 1.treeset结构2.treemap结构3.集合去重辨析总结4.对于arraylist的练习题目5.对于HashMap的练习题目6.第三点的去重运用7.HashSe练习题目 1.treeset结构 下面的这个就是对于这个treeset结构进行测试的一个程序,在这个里面,add表示的就是对于这个…...
如何开启华为交换机 http
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…...
SpringBoot中的RedisTemplate对象中的setIfAbsent()方法有什么作用?
文章目录 原子性操作用于分布式锁可选的过期时间 setIfAbsent() 方法是 Redis 中用于设置一个键值对的命令,只有在该键不存在时才会设置成功。它通常用于实现分布式锁的逻辑 主要功能: 原子性操作 setIfAbsent() 是一个原子性操作,意味着在执行该操作的…...
《合肥工业大学学报(自然科学版)》
《合肥工业大学学报(自然科学版)》以基础理论、应用科学和工程技术为主的综合性学术刊物,主要刊登机械工程、仪器科学与光电工程、材料科学与工程、电气与自动化工程、计算机与信息工程、电子科学与应用物理、土木与水利工程、资源与环境工程、汽车与交通工程、化学…...
Android11 USB Camera会出现预览绿屏问题
目录 一、问题描述 二、问题原因 三、解决方法 一、问题描述 DDR容量是4G及以上的机器,USB Camera会出现预览绿屏问题。 串口中会刷如下log: 二、问题原因 RGA2使用超过4G内存会异常,导致USB Camera调用rga相关操作报错,从而预览绿屏 三…...
Mongodb 获取集合(collection)的统计信息
在MongoDB中,获取指定集合(collection)的统计信息可以通过执行collStats命令来实现。这个命令提供了关于集合的详细信息,包括: 集合的大小索引的大小和数量文档的数量存储空间的使用情况各种统计数据,如平…...
Java中的集合(1)——List、Map和Set
Java标准库自带的java.util包提供了集合类:Collection,它是除Map外所有其他集合类的根接口。Java的java.util包中提供了以下三种类型的集合: List:一种有序列表的集合,例如,按索引排列的Student的List&…...
MySQL8.0主从同步报ERROR 13121错误解决方法
由于平台虚拟机宿主机迁移,导致一套MySQL主从库从节点故障,从节点服务终止,在服务启动后,恢复从节点同步服务,发现了如下报错: mysql> show slave status\G; *************************** 1. row *****…...
【论文阅读】03-Diffusion Models and Representation Learning: A Survey
Abstract(摘要) 扩散模型是各种视觉任务中流行的生成建模方法,引起了人们的广泛关注它们可以被认为是 自监督学习方法【通过数据本身的结构和特征来训练模型,而不是依赖外部标签】 的一个独特实例,因为它们独立于标签注…...
【深度学习】RNN的简单实现
目录 1.RNNCell 2.RNN 3.RNN_Embedding 1.RNNCell import torchinput_size 4 hidden_size 4 batch_size 1idx2char [e, h, l, o] x_data [1, 0, 2, 2, 3] # 输入:hello y_data [3, 1, 2, 3, 2] # 期待:ohlol# 独热向量 one_hot_lookup [[1, …...
每次请求时,检查 JWT Token的有效期并决定是否需要刷新
为了在每次请求时检查 access_token 的有效期,并在过期时自动刷新,可以通过以下步骤实现: 1. 解析 JWT Token 获取过期时间 JWT token 的有效期是编码在 token 本身的,你可以通过解析 token 来获取它的到期时间。JWT token 是由…...
AI大模型开发架构设计(13)——LLM大模型的向量数据库应用实战
文章目录 LLM大模型的向量数据库应用实战1 大模型的局限性大模型的4点局限性大模型的4点局限性的改进实践方法 2 向量数据库使用场景以及改建大模型向量数据库向量数据库选型知识库文档检索增强(Retrieval Augmented Generation) 3 向量数据库应用技术架构剖析向量数据库应用技…...
WPF中Grid、StackPanel、Canvas、WrapPanel常用属性
Grid常用属性 Grid 控件在 WPF 中非常强大,它提供了多种属性来定义行和列的布局。以下是一些常用的 Grid 属性: RowDefinitions 和 ColumnDefinitions: Grid 控件使用 RowDefinitions 和 ColumnDefinitions 来定义行和列的集合。每个 RowDef…...
【芙丽芳丝净润洗面霜和雅漾舒护活泉喷雾
1. 洁面产品: - 芙丽芳丝净润洗面霜:氨基酸洗面奶的经典产品,成分温和,不含酒精、香料等刺激性成分。泡沫丰富细腻,能够有效清洁皮肤的同时,不会过度剥夺皮肤的油脂,洗后皮肤不紧绷,…...
ubuntu更新Cmake
CMake 先验知识创建软链接如何删除符号链接如何找出失效链接并将其删除PATH 优先级查看当前CMake命令的位置 高版本 CMake 安装参考 先验知识 创建软链接 ln -s <path to the file/folder to be linked> <the path of the link to be created>ln 是链接命令&…...
CMOS晶体管的串联与并联
CMOS晶体管的串联与并联 前言 对于mos管的串联和并联,一直没有整明白,特别是设计到EDA软件中,关于MOS的M和F参数,就更困惑了,今天看了许多资料以及在EDA软件上验证了电路结构与版图的对应关系,总算有点收…...
从IT高管到看门大爷:53岁我的职场华丽转身
该文讲述了一位1971年出生的男士,在53岁时因日企撤资而失业。他曾是IT技术员,后晋升为IT高管兼工会主席,但失业后数百份简历石沉大海,面试也因年龄被取消。他意识到年龄是求职的障碍,开始调整心态,降低期望…...
Redis入门到精通(三):入门Redis看这一篇就够了
文章目录 Redis分布式锁的实现原理Redis实现分布式锁如何合理的控制锁的有效时常?**redisson实现的分布式锁**redisson实现的如何保证主从一致性 Redis的集群方案1.主从复制主从数据的同步原理全量同步增量同步 2.哨兵模式Redis的集群脑裂是什么?3.分片集…...
IP基本原理
IP的定义 当前唯一的网络层协议标准定义数据网络层的封装方式、编址方法 MTU 最大传输单元接口收发数据支持的单个包的最大长度不同二层链路类型的接口的MTU不一致。以太网接口默认MTU1500Byte。PPPoE接口默认MTU1480Byte。 IP头部封装格式 IP 头部长度不固定,2…...
数据分析题面试题系列2
一.如何估算星巴克一天的营业额 a.需求澄清:区域?节假日?产品范围? b.收入销售杯数*单价(营业时间*每小时产能*每小时产能利用率)*平均单价 Hypo该星巴克门店的营业时间为12小时(取整&#x…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
