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又指什么?他们怎么实现排序的呢?

看下图你就能一目了解了

方法二

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

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

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

那我们怎么办呢?

我们就要用到迭代器法了

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

总结

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

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

相关文章

网络安全攻击数据的多维度可视化分析

简介 本研究项目通过应用多种数据处理与可视化技术,对网络安全攻击事件数据集进行了深度分析。首先,利用Pandas库读取并预处理数据,包括检查缺失值、剔除冗余信息以及将时间戳转化为日期时间格式以利于后续时间序列分析。 研究步骤 数据分析…

控件交互的优劣势--自动窗帘系统

控件交互在图形用户界面(GUI)设计中具有明显的优劣势。以下是对这些优劣势的详细分析 一,控件交互的优势 (1)直观性:控件交互往往遵循用户习惯和直觉,使得用户无需额外学习即可理解并操作。例如,大多数用户…

git commit --amend

git commit --amend 1. 修改已经输入的commit 1. 修改已经输入的commit 我已经输入了commit fix: 删除无用代码 然后现在表示不准确,然后我通过命令git commit --amend修改commit

《程序员职业规划手册》课程笔记

企业作为一个商业组织,大多动作的基本前提都是看成本和收益。所以一个朴素的理念是,当你创造的价值超过你的薪水,你就一直有竞争力。 想要更好地发展,除了了解路径和能力要求之外,还要回到一个本源问题:理解…

Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 2、线条平滑曲面但有间隔

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata imp…

html5cssjs代码 014 布局框架

html5&css&js代码 014 布局框架 一、代码二、解释三、Bootstrap框架简介 Bootstrap 是一个流行的开源前端开发框架,它由Twitter公司(后独立为Bootstrap团队)创建并维护。Bootstrap 提供了一套现成的、响应式的用户界面组件和设计布局…

【李沐论文精读】GPT、GPT-2和GPT-3论文精读

论文: GPT:Improving Language Understanding by Generative Pre-Training GTP-2:Language Models are Unsupervised Multitask Learners GPT-3:Language Models are Few-Shot Learners 参考:GPT、GPT-2、GPT-3论文精读…

java基础2-常用API

常用API Math类 帮助我们进行数学计算的工具类。 里面的方法都是静态的。 3.常见方法如下: abs:获取绝对值 absExact:获取绝对值 ceil:向上取整 floor:向下取整 round:四舍五入 max:获取最大值 …

深入理解Nginx日志级别

Nginx 是一个高性能的 HTTP 和反向代理服务器,广泛用于提供网站和应用服务。它的强大功能之一是灵活的日志记录能力,允许管理员根据需要配置不同的日志级别。正确理解和使用这些日志级别对于监控、调试和保障你的服务稳定运行至关重要。本文旨在深入介绍…

Stable Diffusion 模型:从噪声中生成逼真图像

你好,我是郭震 简介 Stable Diffusion 模型是一种生成式模型,可以从噪声中生成逼真的图像。它由 Google AI 研究人员于 2022 年提出,并迅速成为图像生成领域的热门模型。 数学基础 Stable Diffusion模型基于一种称为扩散概率模型(Diffusion P…

并查集算法

文章目录 并查集并查集引入1.初始化2.查询3.合并路径压缩代码模板(1)朴素并查集:(2)维护size的并查集:(3)维护到祖宗节点距离的并查集: 并查集 并查集引入 并查集(Union-find Sets)是一种非常精巧而实用的数据结构&a…

设计模式 -- 1:简单工厂模式

目录 代码记录代码部分 代码记录 设计模式的代码注意要运用到面向对象的思想 考虑到紧耦合和松耦合 把具体的操作类分开 不让其互相影响&#xff08;注意这点&#xff09; 下面是UML类图 代码部分 #include <iostream> #include <memory> // 引入智能指针的头文…

Redis底层核心对象RedisObject源码分析

文章目录 1. redis底层数据结构2. 插入KV底层源码流程分析 1. redis底层数据结构 redis 6数据结构和底层数据结构的关系 String类型本质是SDS动态字符串&#xff0c;即redis层面的数据结构底层会有对应的数据结构实现&#xff0c;上面是redis 6之前的实现 redis 7数据结构和底…

关于Nginx服务器配置及性能优化的20道高级面试题

1. 请解释Nginx服务器的工作原理。 Nginx服务器以高性能、稳定性和低资源消耗而著称&#xff0c;其工作原理主要涉及其多进程架构、反向代理功能以及模块组成。具体来看&#xff1a; 多进程架构&#xff1a;Nginx采用一个master进程和多个worker进程的架构。Master进程主要负…

Linux应用程序对异步通知的处理

一. 简介 前面几篇文章学习了 Linux异步通知机制&#xff0c;以及Linux驱动对异步通知部分涉及的内容。文章地址如下&#xff1a; Linux异步通知简介-CSDN博客 Linux驱动中的异步通知机制&#xff1a;信号处理方法-CSDN博客 本文来学习Linux应用程序对异步通知的处理。 二…

[MYSQL数据库]--表的增删查改和字段类型

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、表的增…

高数立体几何笔记

上个学期立体几何章节的一点笔记&#xff0c;很潦草&#xff0c;但重点内容基本都有复习到 Page1&#xff1a;介绍了向量的模、夹角、单位向量、投影投影向量、方向角、点乘、叉乘、混合积的基本运算和性质Page2: 回顾了高中所学的平面直线的多种表示方法以及距离的计算方法&…

Go语言必知必会100问题-21 切片初始化方法及最佳实践

切片初始化 切片使用内置的make函数进行初始化&#xff0c;初始化需要提供两个参数&#xff0c;分别是切片的长度和容量(可选)。如果这两个参数设置的不合理&#xff0c;会使得后续对切片的操作非常低效。下面来看看怎么设置这两个参数是合适的。 假设我们要实现一个转换函数…

【工作实践-07】uniapp关于单位rpx坑

问题&#xff1a;在浏览器页面退出登录按钮上“退出登录”字样消失&#xff0c;而在手机端页面正常;通过查看浏览器页面的HTML代码&#xff0c;发现有“退出登录”这几个字&#xff0c;只不过由于样式问题&#xff0c;这几个字被挤到看不见了。 样式代码中有一行为&#xff1a…

Midjourney绘图欣赏系列(十一)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子&#xff0c;它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同&#xff0c;Midjourney 是自筹资金且闭源的&#xff0c;因此确切了解其幕后内容尚不…