ArrayList与LinkedList、Vector的区别

ops/2024/12/22 11:26:02/
一、ArrayList 和 LinkedList区别:

(1)两者都是线程不安全,都实现了Collection接口。

(2)数据结构:ArrayList是基于动态数组的数据结构,LinkedList是基于双向链表的数据结构

(3)性能:ArrayList支持随机访问,查询快,增删慢,查询的时间复杂度为O(1),插入和删除的时间复杂度为O(n),因为对插入和删除位置后面的元素进行移动位置,以保证内存的连续性

LinkedList不支持随机访问,查询慢,增删快,查询的时间复杂度为O(n),插入和删除的时间复杂度为O(1)

ArrayList:

  • get() 直接读取第几个下标,复杂度 O(1);
  • add(E) 添加元素,直接在后面添加,复杂度O(1);
  • add(index, E) 添加元素,在第几个元素后面插入,后面的元素需要向后移动,复杂度O(n);
  • remove()删除元素,后面的元素需要逐个移动,复杂度O(n)。

LinkedList:

  • get() 获取第几个元素,依次遍历,复杂度O(n);
  • add(E) 添加到末尾,复杂度O(1);
  • add(index, E) 添加第几个元素后,需要先查找到第几个元素,直接指针指向操作,复杂度O(n);
  • remove()删除元素,直接指针指向操作,复杂度O(1)。

(4)空间的消耗:ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。

总结

ArrayList:

优点

  1. 随机访问效率高,适合查找和遍历操作
  2. 内存连续,缓存命中率高,性能相对较好。

缺点

  1. 插入和删除元素效率较低,特别是在中间插入或删除元素时。
  2. 动态扩容需要重新分配内存和复制元素,可能会影响性能。

LinkedList:

优点

  1. 插入和删除元素效率高,特别是在中间插入或删除元素时。
  2. 不需要频繁扩容,没有数组扩容带来的性能损耗。

缺点

  1. 随机访问效率低,需要从头或尾开始遍历。
  2. 每个节点需要额外的引用,占用更多内存空间。

 

二、ArrayList和Vector的区别:

(1)数据结构:ArrayList和Vector底层的数据结构都是数组。

(2)线程安全:Vector线程安全的,底层使用synchronize进行加锁,而ArrayList是线程不安全的。

(3)性能:由于Vector使用synchronize锁来确保线程的安全性,所以性能会稍逊于ArrayList。

(4)初始容量和扩容:ArrayList和Vector的默认初始容量都是10,但是扩容时,ArrayList容量会增长为原来的1.5倍,而Vector的容量会增长为原来的2倍。

(5)Vector实现的Enumeration接口,所以可以使用Enumeration进行遍历元素。

 


http://www.ppmy.cn/ops/144007.html

相关文章

一款轻量级的开源笔记服务软件

大家好,我是兔兔,一位写作爱好者,今天分享的内容是,如何搭建一个开源的、隐私优先的轻量级笔记服务应用。 不知道大家是否有这样的需求: 1、自己想搭建一个个人的学习笔记文档,既要自己看也可以单独分享给…

介绍 Html 和 Html 5 的关系与区别

HTML(HyperText Markup Language)是构建网页的标准标记语言,而 HTML5 是 HTML 的最新版本,包含了一些新的功能、元素、API 和属性。HTML5 相对于早期版本的 HTML(比如 HTML4)有许多重要的改进和变化。以下是…

Linux下部署MySQL8.0集群 - 主从复制(一主两从)

目录 一、部署前准备 1、查看系统信息 # 查看系统版本 cat /etc/red* # 查看系统位数 getconf LONG_BIT[rootlocalhost ~]# cat /etc/red* CentOS Linux release 7.5.1804 (Core) [rootlocalhost ~]# getconf LONG_BIT 642、下载对应安装包 进入MySQL官网:https:…

【Python】【数据分析】深入探索 Python 数据可视化:Plotly 绘图库全面解析

这里写目录标题 引言一、Plotly 概述二、安装 Plotly三、Plotly 的结构与功能模块3.1 Plotly Graph Objects3.2 Plotly Express3.3 Plotly Subplots 四、Plotly 图表类型五、Plotly 图表自定义与美化5.1 自定义图表标题和坐标轴5.2 自定义颜色和样式5.3 添加注释和文本5.4 图表…

MySQL专题:日志及MVCC

MySQL是一种广泛应用的关系型数据库管理系统,以其高性能和灵活性著称。在保证数据安全性和一致性方面,MySQL通过日志和多版本并发控制(MVCC)提供了强有力的支持。本文将深入解析日志和MVCC的原理及其在实际应用中的作用。 日志&a…

SpringBoot 启动类 SpringApplication 一 构造器方法

SpringApplication SpringBootApplication ComponentScan(basePackages { "com.example.*" }) public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args); // Spirngboot程序入口} } public st…

计算机毕业设计hadoop+spark视频推荐系统 短视频推荐系统 视频流量预测系统 短视频爬虫 视频数据分析 视频可视化 视频大数据 大数据

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

《第十二部分》1.STM32之RTC实时时钟介绍---BKP实验

本章将介绍一种计数计时的外设 RTC实时时钟-----Whappy STM32提供了4中时钟来源! 函数名功能作用void BKP_DeInit(void);复位备份区域寄存器配置,将备份域的所有寄存器恢复到默认状态。void BKP_TamperPinLevelConfig(uint16_t BKP_TamperPinLevel);配置…