单值集合总复习
1:Object类的核心方法复习
Object 是所有类【引用数据类型】的 直接 / 间接 父类toString(): 将一个 引用数据类型的对象 转换成 String 类型
class Object{//Sun
//toString()不需要参数:将一个对象转换成字符串 将调用者转换成字符串
public String toString(){
return this.getClass().getName() + "@" + 哈希码值的十六进制;
}
}
class 自定义数据类型 extends Object{
//toString()在没有覆盖的时候和Object类型保持一致
//通常子类都会选择福海toString()
@Override
//jdk5.0一模一样
//jdk5.0 斜变返回类型
public String toString(){//这一行不能修改
//拼装信息少:return xxx + "" + yyy...
//拼装信息多: new StringBuffer(XXX).append(yy)....toString();
}
}
equals():比较两个引用数据类型的对象是否能被视为相等对象[逻辑相等]
class Object{
public boolean equals(Object obj){
return this == obj;//比较地址
}
}
class 自定义数据类型 extends Object{
@Override
public boolean equals(Object obj){//这一行不能修改
if(!(obj instanceof 当前类型))return false;
if(obj == this)return true;
return this.引用数据类型的属性.equals(((当前类型)obj).属性) &&
this.基本数据类型的属性 == ((当前类型)obj).属性
}
hashCode(): 生成一个引用数据类型的对象的哈希码值 -》 服务于HashSet
class Object{
public native int hashCode();//通过地址生成哈希码值
}
class 自定义数据类型 extends Object{
@Override
public int hashCode(){
return 引用数据类型.hashCode() + 基本数据类型;
}
}
API摘录:
注意:当此方法【equals】被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的
哈希码。
2:目前为止覆盖过父类/父接口的方法
toString () / equals () / hashCode () 都是覆盖的是 Object 类的方法compareTo () 方法覆盖的是 Comparable 接口的方法String 类实现 Comparable 接口 覆盖了 compareTo () 方法 按照字符串的每一个位做大小比较Integer 类实现 Comparable 接口 覆盖 compareTo () 方法 按照数字本身大小做比较compare () 方法覆盖的是 Comparator 接口的方法任何一个引用数据类型 想要指定排序规则的话:1 :在这个引用数据类型里面制定排序 implements Comparable < 本类泛型 > -> compareTo ( 1 )2 : 引用数据类型的代码不变 加一个比较器类 implements Comparator < 其他泛型 > -> compare ( 1 , 2 )
3:单值集合框架
接口角度
interface Collection{
add(元素) remove(元素) contains(元素)
size() isEmpty() clear()
addAll() removeAll retainAll()
iterator()
}
interface List extends Collection{
// IndexOutOfBoundsException
add(下标,元素); // [0,list.size()]
set(下标,元素); // [0,list.size()-1]
get(下标);
remove(下标);
indexOf(元素);
lastIndexOf(元素);
}
interface Set extends Collection{
}
interface SortedSet extends Set{
first()
pollFirst() 取出+删除
last()
pollLast() 取出+删除
}
4:学过的单值集合有哪些?他们底层的数据结构分别是?

5:ArrayList HashSet TreeSet核心方法的底层比较原理?
ArrayList集合增删改查

HashSet集合增删改查

TreeSet集合增删改查

6:谈hashCode()重码问题
String 类的哈希码值: // char[]"etoak" => 'e'+'t'+'o'+'a'+'k' => 数值 重码率太高了底层: 31(31*(31(31(31*0+'e')+'t')+'o')+'a')+'k'hashCode() 编写的内部逻辑尽量贴近 官方
7:String类的contains()参数、集合的contains()参数
String 类的 contains() 参数String 类的对象 .contains(String 类型的参数 )集合的 contains() 参数集合的对象 .contains( 集合的泛型 x);// 集合的泛型可能: String/Student/Teacher
8:ArrayList LinkedList HashSet TreeSet如何选择
ArrayList 有序 / 下标 查找快LinkedList 添加 / 删除HashSet 去重TreeSet 排序1 泛型自然顺序2 比较器的定制顺序
9: ArrayList HashSet TreeSet常用的构造方法整理
// 默认开辟十块空间
ArrayList list = new ArrayList();
// 指定初始化容量的开辟
ArrayList list = new ArrayList(int 初始化容量);
// trimToSize() ensureCapacity(1000)
ArrayList list = new ArrayList(Collection);
// 哈希表 分组组数16 加载因子0.75
HashSet set = new HashSet();
// 分组组数 但是肯定变成2(n) 默认加载因子0.75
HashSet set = new HashSet(int 分组组数);
HashSet set = new HashSet(int 分组组数,float 加载因子);
// 去重
HashSet set = new HashSet(Collection);
// 自然顺序
TreeSet set = new TreeSet();
// 定制顺序
TreeSet set = new TreeSet(Comparator);
// 自然顺序
TreeSet set = new TreeSet(Collection);
10:集合的遍历如何选择?
list 集合:有下标for + 下标/foreach/ 迭代器for + 下标:如果遍历集合得到元素的同时 想要得到下标 eg: 打表迭代器:如果遍历集合得到元素的同时 还想要进行删除 -》 car.remove()foreach:除了上面两种情况 全部使用foreachSet集合:没有下标迭代器:如果遍历集合得到元素的同时 还想要进行删除 -》 car.remove()foreach:除了上面两种情况 全部使用foreach
11.fail-fast" 快速失败的原理 【CME】
每一个集合底层都有一个变量叫 modCount 用来记录对集合的操作 [ 添加 / 删除 ... 任何一个对集合的大小操作的都算一次 ] 次数当通过集合获得迭代器的时候 [ 集合对象 .iterator()] 迭代器会将 modCount 的值拷贝到它自己的属性 [expectedModCount] 里面在执行 car.new() 触发两个值的比较如果两个值一样 正常的取值进行下一步处理如果两个值不一样 迭代器就会检测到除了它之外还有其他的线程也在处理集合 为了保证安全性直接抛出 CME 异常提示程序员这里有安全隐患解决方法:1 for+下标+ 倒序【 ArrayList 】2 迭代器遍历+ 迭代器删除3 遍历过程中添加【先加入临时的集合】 + 出去遍历 addAll场景:foreach/迭代器遍历+ 集合的删除 / 集合的添加
12:使用迭代器需要注意的知识点
迭代器car.next(); // 光标下移+ 取出元素car.hasNext();car.remove();// 删除元素+ 光标上移光标 默认 第一个的上一个 【-1】当我们在遍历 A 集合的时候 想要从 A 集合里面删除元素:1:使用集合自己的删除方法 - 》 触发 CME 异常2: 使用迭代器自己的删除方法【正解】 car.remove()当我们在遍历 A 集合的时候 想要往 A 集合里面添加元素:1:使用A 集合自己的添加方法 -> 触发 CME 异常2:使用迭代器的添加方法[ 迭代器没有 add]3:遍历A 集合的时候将想要添加的元素添加 B 集合里面 循环结束之后将 B 集合里面的元素装回 A 集合
13:ArrayList集合如何排序 、 TreeSet集合如何排序
ArrayList 有序:什么都不处理 -》 默认添加顺序调用Collections.sort(list对象 ) -> 自然排序 【泛型类必须有排序规则】调用Collections.sort(list对象 , 比较器对象 ); -> 定制排序 【泛型类可以没有排序】TreeSet set = new TreeSet(ArrayList对象); 自然排序 【泛型类必须有排序规则】TreeSet 有序:TreeSet set = new TreeSet();//自然排序 [ 泛型类必须有排序规则 ]TreeSet set = new TreeSet(比较器对象);// 定制排序 [ 泛型类可以没有排序 ]
14 判断集合中是否存在某个元素?底层看什么?
ArrayListcontains => equals()HashSetcontains => hashCode == equalsTreeSetcontains => compareTo/compare
15 Collections集合的工具类提供的核心方法
// Collections单独为List提供的方法
static修饰的
Collections.sort(List) 按照泛型的自然顺序进行排序
Collections.sort(List,Comparator) 按照比较器的定制顺序进行排序
Collections.reverse(List); 反转集合中元素的顺序
List ll = Collections.synchronizedList(List对象)
//===================================
Collections单独为Collection提供的方法
Collections.addAll(单值集合对象,T ... x); 向集合中一次性添加多个元素
T Collections.max(Collection):取集合中的最后一个元素【泛型的自然顺序升序-最大】
T Collections.max(Collection,Comparator):取集合中的最后一个元素【定制顺序-升序 最大的】
T Collections.min(Collection) 取集合中第一个元素【根据自然顺序[升序]返回集合中最小的元素】
T Collections.min(Collection,Comparator) 取集合中第一个元素【根据定制顺序[升序]返回集合中最小的元素】
int Collections.frequency(Collection,元素)
返回元素在集合中出现的次数
frequency底层:[ArrayList-equals() || HashSet equals() || TreeSet equals()]
相关文章:

单值集合总复习
1:Object类的核心方法复习 Object 是所有类【引用数据类型】的 直接 / 间接 父类 toString(): 将一个 引用数据类型的对象 转换成 String 类型 class Object{//Sun //toString()不需要参数:将一个对象转换成字符串 将调用者转换成字符串 public String …...

Pyside6 布局管理器(4)--- QGridLayout的使用
一、QGridLayout的介绍(官翻) QGridLayout 获得可用的空间(由其父布局或 parentWidget() 提供),将其划分为行和列,并将其管理的每个小部件放入正确的单元格中。 列和行的行为是相同的;我们将…...

从GPT定制到Turbo升级再到Assistants API,未来AI世界,你准备好了吗?
引言 在OpenAI DevDay发布会上,OpenAI再次震撼整个人工智能行业,为AI领域带来了重大的更新。CEO Sam Altman宣布推出了定制版本的ChatGPT,这意味着用户现在可以根据自己的需求打造个性化的GPT,并分享至GPT Store。这一消息对于受…...

「漏洞复现」BladeX企业级开发平台 tenant/list SQL 注入漏洞复现(CVE-2024-33332)
0x01 免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删…...

基于SSM的消防物资存储系统【附源码】
基于SSM的消防物资存储系统 效果如下: 用户功能界面 仓库管理界面 物资入库管理界面 物资出库管理界面 物资详情管理界面 报警通知管理界面 安全检查提醒管理界面 管理员功能界面 研究背景 21世纪,我国早在上世纪就已普及互联网信息,互联网…...

Pseudo Multi-Camera Editing 数据集:通过常规视频生成的伪标记多摄像机推荐数据集,显著提升模型在未知领域的准确性。
2024-10-19,由伊利诺伊大学厄巴纳-香槟分校和香港城市大学的研究团队提出了一种创新方法,通过将常规视频转换成伪标记的多摄像机视角推荐数据集,有效解决了在未知领域中模型泛化能力差的问题。数据集的创建,为电影、电视和其他媒体…...

认识一下 Mochi-1--最新的免费开源人工智能视频模型
Genmo 是一家专注于视频生成的人工智能公司,该公司宣布发布 Mochi 1 的研究预览版。Mochi 1 是一种新的开源模型,可根据文本提示生成高质量视频,其性能可与 Runway 的 Gen-3 Alpha、Luma AI 的 Dream Machine、Kuaishou 的 Kling、Minimax 的…...
Spring 的事务传播机制
Spring 的事务传播机制定义了一个事务方法在遇到已经存在的事务时如何处理。事务传播属性(Propagation)提供了七种机制,以适应不同的业务需求和事务边界管理。 1. Spring 的事务传播机制的类型 (1)REQUIREDÿ…...
线性代数(1)——线性方程组的几何意义
线性代数的基本问题是求解个未知数的个线性方程; 例如:(方程1)。 在线性代数的第一讲中,我们从Row Picture、Column Picture、Matrix Picture三个角度来看这个问题。 上面的系统是二维的。通过添加第三个变量&#…...
写给自己的一些心得体会
为什么是CSDN??? 最近跑实验跑得绝望,感觉自己兜兜转转走了太多太多的弯路,我不知道这样的弯路什么时候是个尽头,就像在USJ排队,看似好像要到入口了,实则一转头还是无尽绵延的队伍。走了这么多弯路,总要…...

论文阅读(二十九):Multi-scale Interactive Network for Salient Object Detection
文章目录 Abstract1.Introduction2.Scale VariationProposed Method3.1Network Overview3.2Aggregate Interaction Module3.3 Self-Interaction Module3.4Consistency-Enhanced Loss 4.Experiments4.1Implementation Details4.2 Comparison with State-of-the-arts4.3Ablation …...
常见存储器及其特点
: 一、只读存储器(ROM)及其类型 1. ROM 特点:存储的数据固定不变,只能读出不能写入,且断电后数据不丢失。应用:通常用于存储系统程序,如BIOS等。 2. PROM(可编程只读…...

《向量数据库指南》——text-embedding-3-large与Mlivus Cloud打造语义搜索新纪元
使用text-embedding-3-large生成向量并将向量插入Mlivus Cloud实现高效语义搜索的深度解析与实战操作 在数字化时代,数据的处理和存储方式正在经历前所未有的变革。特别是随着大数据和人工智能技术的快速发展,向量数据库作为一种新型的数据存储和查询方式,正逐渐受到越来越…...

通过 Bytebase API 查看数据库审计日志
原文地址代码库 Bytebase 是一款数据库 DevOps 和 CI/CD 工具,专为开发者、DBA 和平台工程团队设计。虽然它提供了直观的 GUI 来管理数据库 schema 变更和访问控制,但有些团队可能希望使用 Bytebase API 将 Bytebase 集成到现有的 DevOps 平台中。 在之…...
# 渗透测试# 1.安全见闻(6)通讯协议
安全见闻6 通讯协议 ##B站陇羽Sec## 潜在的安全问题所涉及的领域 无线电安全,协议分析,web渗透,逆向分析 通讯协议涉及的安全主要包括以下几个方面: 1.1 保密性问题 …...
[Gdiplus/Gdi]_[中级]_[实现多行文本的多种颜色绘制-富文本绘制]
场景 在开发WTL/WIN32界面程序时,有时候需要绘制多行的段落文本,但是文本里的数值需要设置红色以便能让人第一时间关注到它。这种文本可以称之为富文本。GDI的DrawText和GDIPlus的DrawString方法都只能连续绘制某个颜色的文本。怎么实现?说明 在《绘图实现单行文本的多种颜色…...

Ubuntu如何创建一个子用户并赋与管理员权限
在Ubuntu操作系统中,如何创建一个子用户并赋与管理员权限 一、创建用户 sudo useradd -m -s /bin/bash test详细解释: sudo:以超级用户(root)权限执行该命令。useradd 命令通常需要管理员权限,因此需要加上 sudo。 useradd:创建新用户的命令。 -m:指示系统为新用户创建…...

【Linux | IO多路复用】epoll的底层原理详解
epoll 是一种高效的 I/O 多路复用机制,广泛用于 Linux 系统中,用于处理大量并发的文件描述符。它比传统的 select 和 poll 方法具有更好的性能,特别是在处理大量并发连接时。 1.epoll的设计思路 epoll是在select 出现 N 多年后才被发明的&a…...

npm run serve 提示异常Cannot read property ‘upgrade‘ of undefined
npm run serve 提示Cannot read property ‘upgrade’ of undefined 一般是proxy的target代理域名问题导致的,如下: 解决方案: proxy: { “/remoteDealerReportApi”: { target: ‘http://demo-.com.cn’, //此域名有问题,会导致…...
Muggle OCR 是一个高效的本地OCR(光学字符识别)模块
Muggle OCR 是一个高效的本地OCR(光学字符识别)模块,专为“麻瓜”设计,用于简化文本识别的过程。这个模块特别适用于处理印刷文本和解析验证码1。 以下是一些关于 Muggle OCR 的主要特点和使用方法: 特点:…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...