当前位置: 首页 > news >正文

单值集合总复习

1Object类的核心方法复习

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:学过的单值集合有哪些?他们底层的数据结构分别是?

5ArrayList HashSet TreeSet核心方法的底层比较原理?

ArrayList集合增删改查

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() 编写的内部逻辑尽量贴近 官方

7String类的contains()参数、集合的contains()参数

String 类的 contains() 参数
String 类的对象 .contains(String 类型的参数 )
集合的 contains() 参数
集合的对象 .contains( 集合的泛型 x);
// 集合的泛型可能: String/Student/Teacher

 

8ArrayList 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:除了上面两种情况 全部使用foreach
Set集合:没有下标
                迭代器:如果遍历集合得到元素的同时 还想要进行删除 -》 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 集合

13ArrayList集合如何排序 、 TreeSet集合如何排序

ArrayList 有序:
                什么都不处理 -》 默认添加顺序
                调用Collections.sort(list对象 ) -> 自然排序 【泛型类必须有排序规则】
                调用Collections.sort(list对象 , 比较器对象 ); -> 定制排序 【泛型类可以没有排序】
                TreeSet set = new TreeSet(ArrayList对象); 自然排序 【泛型类必须有排序规则】
TreeSet 有序:
                TreeSet set = new TreeSet();//自然排序 [ 泛型类必须有排序规则 ]
                TreeSet set = new TreeSet(比较器对象);// 定制排序 [ 泛型类可以没有排序 ]

 

14 判断集合中是否存在某个元素?底层看什么?

ArrayList
                contains => equals()
HashSet
                contains => hashCode == equals
TreeSet
                contains => 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&#xff1a;Object类的核心方法复习 Object 是所有类【引用数据类型】的 直接 / 间接 父类 toString(): 将一个 引用数据类型的对象 转换成 String 类型 class Object{//Sun //toString()不需要参数&#xff1a;将一个对象转换成字符串 将调用者转换成字符串 public String …...

Pyside6 布局管理器(4)--- QGridLayout的使用

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

从GPT定制到Turbo升级再到Assistants API,未来AI世界,你准备好了吗?

引言 在OpenAI DevDay发布会上&#xff0c;OpenAI再次震撼整个人工智能行业&#xff0c;为AI领域带来了重大的更新。CEO Sam Altman宣布推出了定制版本的ChatGPT&#xff0c;这意味着用户现在可以根据自己的需求打造个性化的GPT&#xff0c;并分享至GPT Store。这一消息对于受…...

「漏洞复现」BladeX企业级开发平台 tenant/list SQL 注入漏洞复现(CVE-2024-33332)

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…...

基于SSM的消防物资存储系统【附源码】

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

Pseudo Multi-Camera Editing 数据集:通过常规视频生成的伪标记多摄像机推荐数据集,显著提升模型在未知领域的准确性。

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

认识一下 Mochi-1--最新的免费开源人工智能视频模型

Genmo 是一家专注于视频生成的人工智能公司&#xff0c;该公司宣布发布 Mochi 1 的研究预览版。Mochi 1 是一种新的开源模型&#xff0c;可根据文本提示生成高质量视频&#xff0c;其性能可与 Runway 的 Gen-3 Alpha、Luma AI 的 Dream Machine、Kuaishou 的 Kling、Minimax 的…...

Spring 的事务传播机制

Spring 的事务传播机制定义了一个事务方法在遇到已经存在的事务时如何处理。事务传播属性&#xff08;Propagation&#xff09;提供了七种机制&#xff0c;以适应不同的业务需求和事务边界管理。 1. Spring 的事务传播机制的类型 &#xff08;1&#xff09;REQUIRED&#xff…...

线性代数(1)——线性方程组的几何意义

线性代数的基本问题是求解个未知数的个线性方程&#xff1b; 例如&#xff1a;&#xff08;方程1&#xff09;。 在线性代数的第一讲中&#xff0c;我们从Row Picture、Column Picture、Matrix Picture三个角度来看这个问题。 上面的系统是二维的。通过添加第三个变量&#…...

写给自己的一些心得体会

为什么是CSDN??? 最近跑实验跑得绝望&#xff0c;感觉自己兜兜转转走了太多太多的弯路&#xff0c;我不知道这样的弯路什么时候是个尽头&#xff0c;就像在USJ排队&#xff0c;看似好像要到入口了&#xff0c;实则一转头还是无尽绵延的队伍。走了这么多弯路&#xff0c;总要…...

论文阅读(二十九):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 …...

常见存储器及其特点

&#xff1a; 一、只读存储器&#xff08;ROM&#xff09;及其类型 1. ROM 特点&#xff1a;存储的数据固定不变&#xff0c;只能读出不能写入&#xff0c;且断电后数据不丢失。应用&#xff1a;通常用于存储系统程序&#xff0c;如BIOS等。 2. PROM&#xff08;可编程只读…...

《向量数据库指南》——text-embedding-3-large与Mlivus Cloud打造语义搜索新纪元

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

通过 Bytebase API 查看数据库审计日志

原文地址代码库 Bytebase 是一款数据库 DevOps 和 CI/CD 工具&#xff0c;专为开发者、DBA 和平台工程团队设计。虽然它提供了直观的 GUI 来管理数据库 schema 变更和访问控制&#xff0c;但有些团队可能希望使用 Bytebase API 将 Bytebase 集成到现有的 DevOps 平台中。 在之…...

# 渗透测试# 1.安全见闻(6)通讯协议

安全见闻6 通讯协议 ##B站陇羽Sec## 潜在的安全问题所涉及的领域 无线电安全&#xff0c;协议分析&#xff0c;web渗透&#xff0c;逆向分析 通讯协议涉及的安全主要包括以下几个方面&#xff1a; 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 多路复用机制&#xff0c;广泛用于 Linux 系统中&#xff0c;用于处理大量并发的文件描述符。它比传统的 select 和 poll 方法具有更好的性能&#xff0c;特别是在处理大量并发连接时。 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代理域名问题导致的&#xff0c;如下&#xff1a; 解决方案&#xff1a; proxy: { “/remoteDealerReportApi”: { target: ‘http://demo-.com.cn’, //此域名有问题&#xff0c;会导致…...

Muggle OCR 是一个高效的本地OCR(光学字符识别)模块

Muggle OCR 是一个高效的本地OCR&#xff08;光学字符识别&#xff09;模块&#xff0c;专为“麻瓜”设计&#xff0c;用于简化文本识别的过程。这个模块特别适用于处理印刷文本和解析验证码1。 以下是一些关于 Muggle OCR 的主要特点和使用方法&#xff1a; 特点&#xff1a;…...

请教指针初始化:定义指针时,要么直接指向有效内存,要么置为NULL

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…...

STK Target Sequence实战:不写一行代码,30分钟搞定卫星初始轨道参数优化

STK Target Sequence实战&#xff1a;不写一行代码&#xff0c;30分钟搞定卫星初始轨道参数优化 在航天任务规划中&#xff0c;轨道设计往往是项目初期最耗时的环节之一。传统方法需要工程师反复调整参数、运行仿真、分析结果&#xff0c;整个过程可能持续数小时甚至数天。而ST…...

OpenCV和numpy版本打架?一个pip命令同时安装opencv-python和contrib的避坑实践

OpenCV与NumPy版本冲突全攻略&#xff1a;精准配对安装与兼容性验证 当你兴致勃勃地准备开始一个计算机视觉项目&#xff0c;却在导入OpenCV时遭遇numpy.core.multiarray failed to import这样的错误提示&#xff0c;那种挫败感我深有体会。这种问题通常发生在Python数据科学和…...

终极鼠标革命:如何用Mac Mouse Fix让你的普通鼠标超越苹果触控板体验

终极鼠标革命&#xff1a;如何用Mac Mouse Fix让你的普通鼠标超越苹果触控板体验 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 还在为macOS上…...

Go语言服务网格流量管理:熔断与限流

Go语言服务网格流量管理&#xff1a;熔断与限流 1. 熔断器模式 熔断器防止级联故障&#xff0c;提高系统可用性。 package meshimport ("sync""time" )type CircuitBreaker struct {mu sync.RWMutexstate CircuitStatefailureCount intma…...

5G上行免调度传输:开启无线通信新篇章

5G上行免调度传输&#xff1a;开启无线通信新篇章 在无线通信技术不断演进的浪潮中&#xff0c;5G以其高速率、低时延和大连接等特性&#xff0c;成为推动社会数字化转型的关键力量。其中&#xff0c;上行免调度传输作为5G技术体系中的一个重要环节&#xff0c;正逐步展现出其独…...

EMC预合规测试:传导与辐射发射的实战指南

1. 预合规EMC测试的核心价值与挑战在电子设备开发领域&#xff0c;电磁兼容性&#xff08;EMC&#xff09;问题如同无形的暗礁&#xff0c;往往在产品开发后期才突然显现&#xff0c;导致昂贵的重新设计和上市延迟。我曾参与过一个工业控制设备的项目&#xff0c;团队在功能验证…...

Godot MCP服务器:AI助手与游戏开发工作流的高效集成方案

1. 项目概述&#xff1a;为什么我们需要一个更好的Godot MCP&#xff1f;如果你是一个Godot引擎的开发者&#xff0c;尤其是当你尝试将AI能力集成到你的游戏开发工作流中时&#xff0c;你很可能听说过或者用过MCP&#xff08;Model Context Protocol&#xff09;。简单来说&…...

Claude Code集成X API:一键发推提升开发者分享效率

1. 项目概述&#xff1a;在 Claude Code 中无缝发布 X 推文如果你和我一样&#xff0c;日常开发工作流已经深度整合了 Claude Code&#xff0c;那么你肯定体会过那种“心流”被打断的瞬间&#xff1a;当你在终端里调试出一个漂亮的解决方案&#xff0c;或者用脚本跑出了一个惊艳…...

视频技术演进:从模拟到数字的革命与压缩技术解析

1. 视频技术演进&#xff1a;从模拟到数字的革命上世纪30年代末&#xff0c;当第一套视频标准在美国诞生时&#xff0c;谁也没想到这个被称为RS-170的技术会成为现代视频技术的基石。作为最早的模拟视频标准&#xff0c;RS-170定义了525线&#xff08;其中480线为有效视频内容&…...