当前位置: 首页 > 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;…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...