搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
小桥流水78
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Android生态下的Kotlin有哪些更新#GoogleIO 2023_kotlin版本
2
SVN版本控制_svn已纳入版本控制
3
python+cv2+gstreamer 推流<500ms低延迟的处理策略_gstreamer python
4
libevent入门教程:Echo Server based on libevent 不指定 (必看)_libevent 如何不指定-i -l
5
解码流程图_数字解码流程图
6
【机器学习】人工智能与气候变化:利用深度学习与机器学习算法预测和缓解环境影响
7
蓝桥入门训练(Python&&C/C++)---A+B问题_python里输入两个整数,用空格隔开,分别代表 a,b
8
PHP+MySQL图书管理系统网页_php图书管理系统
9
Hadoop完全分布式安装步骤
10
git官网下载太慢解决方法_git-2.39.0.2-64-bit.exe
当前位置:
article
> 正文
集合List和ArrayList等实现类的底层原理分析
作者:小桥流水78 | 2024-06-24 11:19:52
赞
踩
集合List和ArrayList等实现类的底层原理分析
List
概述
继承Collection和Iterable接口
有序的允许重复的集合,允许null值(不推荐),允许将自身作为元素(不推荐)
此接口和实现子类可以对列表中的每个元素的插入位置进行精确控制。可以根据索引访问元素,也可以搜索列表中的元素。
有iterator迭代器可单向遍历,同时有ListIterator双向遍历
选用概述
线程安全用Vector
线程不安全,查询多用ArrayList,增删多用LinkedList
- ArrayList:底层数组,查询快,增删慢,线程不安全
- LinkedList:底层双向链表,查询慢,增删快,线程不安全
- Vector:底层数组,线程安全
方法
继承Collection的方法
方法一般都会多出用索引的重载方法
get(int index):通过索引取出元素
subList(int start,int end): 开始到
结束-1
的位置,获取此段的子list的视图
在此子List上的修改会使原List也被修改
list的实现子类
- ArrayList
概述
会自动扩容的数组,线程不安全
查询快,增删慢
底层实现
Object数组实现,存入元素时会丢失类型
底层扩容因子为原长度的1.5倍
默认数组长度是10,扩容时最大长度为int最大数
对象内部有继承自父类AbstractList的modcount属性
每次对数组结构进行改变时,该值都会增加1
在迭代器中会有expectedModCount值,会与此值进行比较,如果一致迭代;不一致,抛出异常。
简单校验,防止迭代期间原始集合改变
RandomAccess接口
用于标明实现该接口的List支持快速随机访问,主要目的是使算法能够在随机和顺序访问的list中表现的更加高效。
所以有此接口的集合,优先选用for循环遍历;
方法
继承自list的对元素和索引的增删改查
removeRange(int start,int end):范围内删除,开始到
结束-1
trimToSize():缩小长度
Vector 向量
概述
会自动扩容的数组,线程安全
基本与ArrayList一致,只要记住多了线程安全,效率低低一点
查询快,增删慢
底层实现、
Object数组实现,
默认数组长度为10,默认的扩容长度是原数组2倍,也可通过构造器自定义扩容长度
也有modcount值
每次对数组结构进行改变时,该值都会增加1
在迭代器中会有expectedModCount值,会与此值进行比较,如果一致迭代;不一致,抛出异常。
简单校验,防止迭代期间原始集合改变
方法
capacity():底层数组长度,不是数组内元素的个数
size():元素的个数
Stack 栈
概述
表示后进先出的(LIFO)的对象堆栈,只能在堆栈的顶部操作
继承自Vector
创建时不包含元素
由于Queue队列拥有的堆栈操作设定更完整和一致,因此推荐使用Queue,不推荐使用此类
允许将Vector视为堆栈
方法
继承自vector的方法
empty():空校验
peek():查看堆栈顶部的对象
pop():取出堆栈顶部的对象
push(E e):把元素e压入堆栈顶部
search(E e):搜索元素在堆栈中的位置
LinkedList
概述
既有线性列表list特点,又有队列queue的特点,同时又有链表的特点
查询慢,增删快;线程不安全
允许空值
允许将链表用作堆栈 队列和双端队列
任何使用索引的方法,都会从头 或尾 遍历集合,因此效率很低,尽量不用
底层实现
双向链表实现
也有modcount值
每次对数组结构进行改变时,该值都会增加1
在迭代器中会有expectedModCount值,会与此值进行比较,如果一致迭代;不一致,抛出异常。
简单校验,防止迭代期间原始集合改变
方法
继承自list和queue的方法
有操作集合头尾元素的方法
addFirst等方法无返回值,有问题抛异常
offer和offerFirst等返回boolean值来确定
getFirst方法遇空集合时抛异常
pop和peek等方法遇空集合时返回null值
方法会通过从集合取值是否为空来做判断,所以集合中尽量不要放空值
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/小桥流水78/article/detail/752638
推荐阅读
article
不懂数字
后端
Box
List
、
Polygon
的
意思?_
die
box
...
在
后端
innovus中会经常生成
box
,比如创建一个blockage,定义芯片
的
形状等。所以,学会通过坐标来表示一个bo...
赞
踩
article
Redis
入门(四):
Redis
hash
命令
和
Redis
list
命令
_
java
redis
...
Redis
hash
命令
Redis
list
命令
https://github.com/Haiyoung/learni...
赞
踩
article
python
中的
list
(
列表
)
append
()方法 与
extend
()方法的用法 和 区别...
append
()方法使用首先看官方文档中的描述:
list
.
extend
(L) Extend the
list
by a...
赞
踩
article
【
初阶
与
进阶
C++
详解】第十篇:
list
(
list
接口介绍和
使用
+
list
模拟实现+反向
迭代
器
和
迭代
...
list
是一个带头
的
双向循环链表。
使用
记得包含头文件。_
list
的
进行
复制
,
迭代
器
list
的
进行
复制
,
迭代
器
...
赞
踩
article
数据结构
初阶(2)(
ArrayList
简介、
ArrayList
()的
构造
方法
、
ArrayList
的扩...
数据结构
初阶(2)(
ArrayList
简介、
ArrayList
()的
构造
方法
、
ArrayList
的扩容、
方法
和三种遍历方...
赞
踩
article
yolov9
目标检测测试报错AttributeError: ‘
list
‘
object
has
no...
general.py的位置可以直接点击报错的这个链接跳转,当然也可以在根目录下的
yolov9
-main\utils\ge...
赞
踩
article
【
漏洞
复现】
SpringBlade
error
/
list
SQL
注入
漏洞
_
springblade
漏...
SpringBlade
框架后台 /api/blade-log/
error
/
list
路径存在
SQL
注入
漏洞
,攻击者可以利...
赞
踩
article
SpringBlade
后台框架 /api/
blade
-
system
/
dict
-biz/
list
存...
SpringBlade
是一个由商业级项目升级优化而来的 SpringCloud 分布式微服务架构,采用Spring B...
赞
踩
article
SpringBlade
dict
-
biz
/
list
SQL 注入漏洞复现_
springblade
d...
SpringBlade
后台框架/api/blade-system/
dict
-
biz
/
list
路径存在SQL注入漏洞...
赞
踩
article
【
漏洞
复现】
Saber
企业级
开发
平台
-
SQL
注入-
list
...
受益于
企业级
前端应用开发
平台
EDP ,它为项目管理、包管理、调试、构建、代码生成、代码检测、单元测试等各个环节提供解决...
赞
踩
article
SpringBlade
error
/
list
SQL
注入
漏洞
复现_
api
-
list
接口处存在
sql
...
SpringBlade
框架后台 /
api
/blade-log/
error
/
list
路径存在
SQL
注入
漏洞
,攻击者除了可...
赞
踩
article
redis
.
clients
.
jedis
.
exceptions
.JedisDataException:...
接下来,请检查应用程序代码,特别是与Redis相关的部分,确保没有发送不正确的Redis命令。确保使用的Redis客户端...
赞
踩
article
JSON
parse error: Cannot
deserialize
value
of
type
...
在前后端传递参数时,如果为
JSON
,后端使用@RequestBody对象类型接受数据,会出现 500/400错误。也就是...
赞
踩
article
【
数据结构
】
初识
集合
&深入剖析
顺序
表
(
Arraylist
)...
介绍了Java中
集合
的一些框架,单列
集合
的一些接口,以及
顺序
表
ArrayList【
数据结构
】
初识
集合
&深入剖析
顺序
表
(A...
赞
踩
article
Java
数据结构
之
ArrayList
(
如果想知道
Java
中有关
ArrayList
的
知识点
,那么只看这...
Java
数据结构
之
ArrayList
(
如果想知道
Java
中有关
ArrayList
的
知识点
,那么只看这一篇就足够了!)_b...
赞
踩
article
Java
泛型,
数据结构
,
List
,
Set
详细介绍...
Java
泛型的介绍与使用方法 ,
数据结构
概述 ,
List
集合以及set集合介绍
Java
泛型,
数据结构
,
List
,Se...
赞
踩
article
uni
app扩展组件---
uni
-
list
...
组件名:
uni
-
list
代码块:uListuListItem
uni
-badge
uni
-icons点击下载&安装。_
uni
...
赞
踩
article
[深度学习]
docker
image
list
request
returned
Internal...
在 powershell 里执行
docker
image
list 报错。_
docker
:
request
return...
赞
踩
article
Java
集合
框架:
ArrayList
的
介绍
、
使用
、
原理与源码解析...
本文将从介绍
ArrayList
开始,详细探讨其
使用
方法
、
工作原理以及背后
的
源码实现,帮助读者深入理解并灵活运用 Ar...
赞
踩
article
1-1
链表
(
List
)及
经典
问题_
list
判断
nullptr
...
本文整理了
链表
相关的
经典
问题,采用C++实现。后续会慢慢补充。_
list
判断
nullptr
list
判断
nullp...
赞
踩
相关标签
SoC
芯片设计全流程培训
芯片
数字IC后端
Redis hash
Redis list
python
shell
c++
list
数据结构
java
开发语言
顺序表
ArrayList
目标检测
人工智能
计算机视觉
sql
数据库
spring boot
后端
web安全
SQL注入漏洞
dict-biz/list