java-单列集合-set系列

set集合继承collection,所以API都差不多,我就不多加介绍

直接见图看他们的特点

我们主要讲述的是set系列里的HashSet、LinkedHashSet、TreeSet

HashSet

HashSet它的底层是哈希表

哈希表由数组+集合+红黑树组成

特点:增删改查都性能良好

哈希表具体是什么,我也不太讲的清,具体见java上册197集

我们主要是了解它的去重

他是如何去重的呢?

通过的是HashCode方法和equals方法

当我们储存的是自定义对象时,我们就必须要重写它们

如上图,s1和s2名字和姓名重复了,我们认为是同一个人,所以我们要去重

因为HashSet底层不知到student这个自定义类,所以不会对他进行去重

所以我们只有自己在student类里重写HashCode方法和equals方法

LinkedHashSet

这个就是比HashSet多了个有序的特点,其余差不多

那我们以后要如何选择使用哪个呢?

见下图

TreeSet

他是Set的子类

特点:

注意了:它的特点是可排序

当我们写的泛型输入的是底层已经处理的数据类型,他们就会默认排序好

如下图

那它是怎么排序的呢?

默认排序的规则如下

但是如果是字符串怎么比较呢?

很简单,就是逐一比较,例如cb和aaa比较哪个大呢?

显然cb大

首先逐一比较,就是cb的第一个和aaa的第一个比较

如果一样就下一个,但是如果已经比较出来了,就不会继续比较了

但是我们要想,如果我们传入的数据类型是,自定义对象类型呢?或者我们不要这默认的比较规则想改变为其他规则呢?

它有两种解决方法:

方法一

首先我们要实现接口

然后我们就要重写比较规则

然后就行了

但是我们刚学一般有这些疑问

这是自定义对象,我们要不要重写HashCode方法和equals方法呢

当然是不要的,这个是TreeSet系,底层是红黑树,不是哈希表,不要搞混了

这个指定的规则里面this指什么?o又指什么?他们怎么实现排序的呢?

看下图你就能一目了解了

方法二

首先我们要知道,默认是使用第一种方法,但是如果第一种方法不能满足我们的需求,我们就只能用第二种方法

看上图,我们没有指定特定的比较规则,所以是按照第一种方法的默认规则进行排序的

但是我们现在不要这种比较规则了,我们想要根据字符串的长度来比较,长度长的就更大

那我们怎么办呢?

我们就要用到迭代器法了

如下采用匿名内部类的形式传入形参,而这个形参代表的就是比较规则

总结

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Seata 2.x 系列【8】Spring Cloud 集成客户端

有道无术,术尚可求,有术无道,止于术。 本系列Seata 版本 2.0.0 本系列Spring Boot 版本 3.2.0 本系列Spring Cloud 版本 2023.0.0 源码地址:https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 前言2. 问题演…

如何解决跨网文件交换行为分散难管控等问题?

跨网文件交换是指在不同的网络环境之间,如内网和外网,安全地传输文件的过程。这通常涉及到网络隔离的场景,比如政府机构、金融机构、大型企业等,它们为了安全和保密的需要,会通过物理隔离、逻辑隔离等方式,…

《向量数据库指南》——Milvus Cloud BYOC:为数据安全而生?

最近,整个硅谷都在关注 OpenAI 和 Anthropic 的动态。先是 Anthropic 发布了 Claude 3,剑指 GPT-4,被媒体认为“打破了 OpenAI 不可战胜的神话”。这也点燃了整个科技圈的热情,纷纷期待 OpenAI 放出 GPT-5 应战。随后(美东时间 3 月 5 日),OpenAI 发布一则官方公告,主题…

算法打卡day14|二叉树篇03|104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

算法题 Leetcode 104.二叉树的最大深度 题目链接:104.二叉树的最大深度 大佬视频讲解:二叉树的最大深度视频讲解 个人思路 可以使用层序遍历,因为层序遍历会有一个层数的计算,最后计算到的层数就是最大深度; 解法 迭代法 就是…

基于SWOT的智能手机企业财务战略研究1.62

摘 要 近些年,网络技术日新月异,智能手机深受消费者喜爱,人们通过网络,手机应用,可以极大地方便人们学习,工作等等。由于国家对电信行业的大力支持,中国消费者群体逐步成为最具潜力的手机购买者…

基于单片机的IC 卡门禁系统设计

摘要:针对传统门锁钥匙易丢失、配置不便和忘记携带等问题,提出了一种基于STC89C52 的IC 卡门禁系统设计。该系统以STC89C52 单片机为核心来控制电子锁模块的开关。主要过程是由RFID 模块读取IC卡ID 并通过串口发送至STC89C52 单片机模块,STC89C52 单片机模块可以实现在线对I…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的吸烟检测系统(深度学习+Python代码+PySide6界面+训练数据集)

摘要:本文详细说明了如何利用深度学习开发一个用于监测吸烟行为的系统,并分享了完整的代码实现。该系统采用了先进的YOLOv8算法,同时还使用YOLOv7、YOLOv6、YOLOv5算法,并对它们进行了性能比较,呈现了不同模型的性能指…

VS中配置生成事件

一、为什么需要使用生成事件? 在实际开发过程中,在项目生成DLL后,需要被复制到不同的目录下被引用,很麻烦。 我们可以利用VS中的项目生成事件属性来进行生成后的DLL复制到指定的目录,或者进去其他的操作,比…

C/C++——Tchisla求解器(多线程高性能版本)

前言 之前一篇文章中介绍的使用Python写的Tchisla求解器Python——Tchisla求解器(暴力搜索法)在我实际使用中有比较大的缺陷,首先是太慢了,对于每日一题中四位数的目标数字,往往搜索数个小时都找不完1~9的全部最优解&…

重学SpringBoot3-ErrorMvcAutoConfiguration类

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-ErrorMvcAutoConfiguration类 ErrorMvcAutoConfiguration类的作用工作原理定制 ErrorMvcAutoConfiguration示例代码1. 添加自定义错误页面2.自定义错误控…

【小白学机器学习8】统计里的自由度DF=degree of freedom, 以及关于df=n-k, df=n-k-1, df=n-1 等自由度公式

目录 1 自由度 /degree of freedom / df 1.1 物理学的自由度 1.2 数学里的自由度 1.2.1 数学里的自由度 1.2.2 用线性代数来理解自由度(需要补充) 1.2.3 统计里的自由度 1.3 统计学里自由度的定义 2 不同对象的自由度 2.1 纯公式的自由度&#…

汤唯N次被封后,除了人美外,这些也许你没想到!

汤唯N次被封后,除了人美外,这些也许你没想到! 引言:影坛的璀璨明星 #李秘书讲写作#注意到,在光鲜亮丽的电影圈,有一位女演员以其独特的气质和深入人心的演技,成为了众多观众心中的璀璨明星。她…

國内linux服务器解决Ollama安装超时

curl -fsSL https://ollama.com/install.sh | sh 执行一直超时 做如下配置: 修改hosts文件,直接将http://github.com做个ip指向。 sudo vim /etc/hosts 输入密码后,按 i 增加以下配置 # github 注意下面的IP地址和域名之间有一个空格 140…

朱熹凭着理学成为天选之子,读书方法也很实用

唐朝是李姓的天下,推行老子的道家思想。同时,佛教兴旺鼎盛。儒家开始没落,失去主要地位。为了恢复儒家的地位,朱憙极力发展理学。 理学又叫道学。北有孔子,南有朱子。朱憙是理学集大成者,被称为朱子。理学…

STM32的GPIO初始化配置-学习笔记

简介: 由于刚开始没有学懂GPIO的配置原理,导致后面学习其它外设的时候总是产生阻碍,因为其它外设要使用前,大部分都要配置GPIO的初始化,因此这几天重新学习了一遍GPIO的配置,记录如下。 首先我们要知道芯片…

基于支持向量机SVM的点火电流预测

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 完整代码和数据下载链接:基于支持向量机SVM的点火电流预测(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88947558 SVM应用实例,基…

.Net Core 中间件验签

文章目录 为什么是用中间件而不是筛选器?代码实现技术要点context.Request.EnableBuffering()指针问题 小结 为什么是用中间件而不是筛选器? 为什么要用中间件验签,而不是筛选器去验签? 1、根据上图我们可以看到,中间件在筛选器之…

【Rockchip android7.1 平台rtl8821cs wifi移植调试】

Rockchip 平台rtl8821cs wifi移植调试 问题描述解决方法 郑重声明:本人原创博文,都是实战,均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: Rockchip rk3128 OS:Android 7.1.2 Kernel: 3.10 问题描述 客户需要在现在的板子上调一款RTL882…

前端的数据标记协议

文章目录 数据标记协议是什么数据标记协议的作用常见的数据标记协议Open Graph protocol 开放图谱协议基本元数据协议可选元数据结构化属性 —— 元数据的属性多个相同的元数据标签类型元数据的使用方法全局类型使用自定义类型使用对象类型使用歌曲对象类型视频对象类型文章对象…

算法打卡day15|二叉树篇04|110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

算法题 Leetcode 110.平衡二叉树 题目链接:110.平衡二叉树 大佬视频讲解:平衡二叉树视频讲解 个人思路 可以用递归法,计算左右子树的高度差,当超过1时就不为平衡二叉树了; 解法 回顾一下二叉树节点的深度与高度; …