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

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...