ArrayList 、 LinkedList、Vector的区别
liuian 2025-01-14 15:19 40 浏览
ArrayList 、 LinkedList、Vector的区别如下:
ArrayList | LinkedList | Vector | |
结构 | 动态数组 | 双向链表 | 动态数组 |
是否线程安全 | 否 | 否 | 是 |
效率 | 遍历查找快,插入删除慢 | 插入删除快,遍历查找慢 | 遍历查找快,插入删除慢 |
初始容量 | 10 | 双向链表没有初始容量 | 10 |
扩容机制-倍数 | 倍数 :1.5 +1 第一次扩容公式 10*1.5+1 = 16 第二次扩容公式 16*1.5+1 = 25 | 双向链表也没有扩容机制,一直在后面或者前面添加元素就好 | 倍数 2 倍 比如初始值是10, 第一次扩容公式 10*2 = 20 第二次扩容公式 20*2 =40 |
ArrayList
ArrayList 是动态数组,动态的意思是可以随时增加数组长度,众所周知,普通数组的长度是定死的,想要增加长度,就必须重新定义一个固定长度的数组,然后在把元素加进去,但是ArrayList可以随意增加或删除元素,这就让我们在操作的时候变得更灵活,动态数组每个元素都有一个下标,也就是标识这个元素的位置,通过这个下标,计算机就可以知道这个元素存放在内存的哪个位置,所以ArrayList 想要遍历查找某个元素的时候很快就能找到!而且,ArrayList也是线程不安全的, ArrayList的底层存储原理如下:
既然遍历查找很快,那为什么插入删除就很慢呢?
因为ArrayList 是基于下标存储的,如果你在中间某个元素的前面插入一个元素,那么后面的元素的下标都要往后移一位,这无疑会影响效率,删除也是同样的道理,删除某个元素后,那么后面的元素下标就都要往前移一位;如图:
LinkedList
LinkedList的底层结构是双向链表,那什么是双向链表呢?学过java的童鞋们肯定都知道Iterator 迭代器吧? 其实Iterator 就是单向链表,单向链表中,每个元素中除了数据之外还有一个指针,这个指针指向下一个元素,我们先来看看单向链表是什么样的,如图:
单向链表
双向链表
我们知道了单向链表,也就很容易猜出双向链表了,其实双向链表就是除了元素本身之外,还有两个指针,一个指针指向前一个元素的地址,另一个指针指向后一个元素的地址,如下图:
LinkedList的底层就是用双向链表实现的,因为链表本身是无序的,所以LinkedList 插入或者删除都很快,但是要查找或者遍历的时候就会很慢,因为双向链表每次查找某个元素的时候都会在内部遍历一遍,直到找到那个指定下标的元素为止,另外,LinkedList 的内存占用要比ArrayList大,因为LinkedList除了存储数据之外,还存储了2个指针,一个指向前一个元素,一个指向后一个元素。
补充知识:
双向链表,因为存储了2个指针,一个指向前一个元素,一个指向后一个元素,所以,从双向链表的任意一个元素开始,都可以很方便快速地访问它的前一个节点和后一个节点。
LinkedList 也是一个 队列,因为它实现了 Deque<E> 接口,而 Deque<E> 又实现了Queue<E> 接口,所以LinkedList也间接实现了Queue接口,用add()进行入队,使用 poll() 方法进行出队操作,遵循先进先出原则!
Vector
总体来说,Vector除了是线程安全的之外,Vector 和 ArrayList 的底层存储结构基本相似,但又不完全相同,不同点如下:
ArrayList的性能方面要优于Vector
Vector 和 ArrayList 都是动态数组,会根据实际需要动态调整容量,只不过Vector每次都会增加一倍,而ArrayList每次只会增加50%;
Vector 内每个方法都带有synchronized 同步代码块,所以Vector是线程安全的,而ArrayList 是线程不安全的
相关推荐
- gho文件安装win10系统方法(gho文件怎么重装系统)
-
不建议这么操作,如果真的要复制,也是很麻烦的,首先要删除win10里面所有的驱动,注意是所有的,然后关机,注意不能重启进入系统,否则又要重新再来,其次找个U盘pe启动盘或者启动光盘,在开机进入pe系统...
- 下载163免费邮箱(免费下载网易邮箱163)
-
第一步:首先,我们手机里要有一个浏览器,小编比较用UC浏览器,当然可以用手机都是自带网页浏览器的,我这边的手机下载网易邮箱第二步:打开UC浏览器或者带浏览器,我们在地址栏上直接输入最新网易邮箱下载安装...
- windows microsoft(windows microsoft store加载不出)
-
电脑开机时出现MicrosoftWindows遇到意外错误,可以尝试用最后一次正确配置来恢复一下。1、重启电脑。2、在电脑显示完硬件信息之后,进入windows界面之前,按F8键。3、在出现的选项菜单...
- 不读u盘的解决办法(不读u盘怎么回事)
-
u盘在电脑里读不出来,出现这种情况,可以用以下方法解决:1、判断U盘是否已经正确插入USB接口,你可以拔下来换个插口试试。2、如果已经启用了USB设备但运行不正常,解决办法为在设备管理器中删除“通用...
- win11怎么激活(win11怎么激活office)
-
目前,Windows11的永久激活方法还没有被公开或者确认。不过,你可以尝试以下几种方法来激活Windows11:使用数字许可证:如果你的电脑已经安装了Windows10并且已经激活,那么你可以...
- 苹果恢复出厂设置(苹果恢复出厂设置还能恢复数据吗)
-
首先打开手机上面的“设置”功能,进入手机的系统设置。进入手机的设置后,选择“通用"。进入通用之后,往下滑动页面,在页面的最下方可以看到“还原”的选项,点击进入。进入还原之后,有多个还原选项,我...
- 路由器的配置步骤(路由器配置教学)
-
打开浏览器-输入192.168.1.1(一般路由器地址是这个或者查看路由器背面的登录信息)进路由-输入用户名,密码,(默认一般是admin)。2、在【设置向导】里,选择【PPOE拨号】(有些是ADS...
- psp模拟器ios(psp模拟器ios推荐)
-
psp手机模拟器推荐PPSSPP,作为最流行的开源PSP模拟器,因为其强大的功能和兼容性广受玩家们喜爱。虽然提供了PC和安卓双平台的支持,但是有碍于安卓设备的硬件,移动端PPSSPP的功能并不完整。不...
- 台式机重装系统按f几(重装电脑系统按f几)
-
F8、F9、F10、F11、F12、F2、del。一般用到这几个。下面以联想电脑装WIN10系统为例:1、将制作好的U盘插入要重装系统的电脑,开机画面出现电脑品牌logo时,不停地按“f2键”进入“B...
- win10激活错误代码0x8007007b
-
Win10激活出现0x8007007b解决方法如下1、找到计算机,右键点击属性,确认你的电脑系统是否是windows10。2、鼠标右击桌面,依次点击个性化-主题-桌面图标设置,勾选计算机后依次点击应用...
-
- 4000台式电脑最好的组装配置
-
四千元价格组装电脑主机与五千元组装电脑主机的价格类似,因为电脑主机就几个大部件,电脑主机主板是多少代的产品?主板内存的插槽数?电脑处理器等如果是自己组装,都可以配置到十二代产品,电脑硬盘可以分为256G固态硬盘做系统盘,1T机械硬盘作为工作...
-
2025-11-06 20:05 liuian
- linux是一种什么系统(linux属于什么系统)
-
Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。其内核由林纳斯·本纳第克特·托瓦兹于1991年1...
- 手机管理大师免费版(手机管理大师极速版)
-
使用手机“文件管理”打开文件夹时提示访问受限,需要前往“文件”应用查看1.进入手机设置——安全——应用权限——权限/应用2.在手机桌面找到手机管家——权限隐私——应用权限——权限/应用?当然,相对于被...
- 电脑能开机但是进不去桌面怎么办
-
打开任务管理器按Ctrl+Shift+Esc打开任务管理器。文件中运行新任务点击文件,运行新任务。输入指令重启桌面输入explorer.exe,点击确定,等待桌面重启完成就可以了。电脑已经是我们生活中...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
