`

<转>ArrayList与Vector的区别

    博客分类:
  • Java
阅读更多

1) vector 线程同步 的,所以它也是线程安全 的,而arraylist 线程异步 的,是不安全的 。如果不考虑到线程的安全因素,一般用 arraylist效率比较高。

2) 如果集合中的元素的数目大于目前集合数组的长度时,vector 增长率为目前数组长度的100%,arraylist 增长率为目前数组长度的50% .如果在集合中使用数据量比较大的数据,用vector有一定的优势。

3) 如果查找一个指定位置的数据vector和arraylist使用的时间是相同 的,都是O(1) ,这个时候使用vector和arraylist都可 以。

而如果移动一个指定位置的数据花费的时间为O(n-i)n为总长度 ,这个时候就应该考虑到使用linklist ,因为它移动一个指定位置的数据所花费 的时间为0(1),而查询一个指定位置的数据时花费的时间为0(i)

 

 

使用模式
在ArrayList和Vector中,从一个指定的位置(通过索引)查找数据 或是在集合的末尾增加、移除一个元素所花费的时间是一样的 ,这个时 间我们用O(1)表示。但是,果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i) ,其中n代表集合中元素的个数,i代表元素增 加或移除元素的索引位置。为什么会这样呢?因为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢?
这意味着,你只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或
ArrayList都可以

如果是其他操作,你最好选择其他的集合操作类 。比如,LinkList 集合类在增加或移除集合中任何位置的元素所花费 的时间都是一样的—O(1),但它在索引一个元素的使用时比较慢O(i),其中i是索引的位置.

使用ArrayList 也很容易,因为你可以简单的使用索 引来代替创建iterator对象的操作。

LinkList 也会为每个插入的元素创建对象,所有你要明白它也会带来额外的开销。

 

其实也可以使用一个简单的数组(Array )来代替Vector ArrayList 。尤其是对于执行效率要求高的程序更应如此。

因为使用数组(Array )避免了 同步、额外的方法调用和不必要的重新分配空间的操作。

vector同步arraylist不同步
vector的容器是按原容器的2倍递增
arraylist的容器是按原容器的3/2倍+1递增的
所以arraylist占的内存小一点

 

 

1)《Thinking   in   Java》上很明确地说了:Vector是一个java1.0/1.1遗留的类,是为了与老代码兼容而保留的。有了ArrayList以后,应该尽量使用 ArrayList而不是Vector。

2) 有人说,Vector可以同步,而ArrayList不能同步,是不对的。
正确的说法应该是:ArrayList(包括所有新一代的容器)可以选择性地使用同步,不需要时就不使用,而不是像Vector那样没有选择。

3) vector的同步是指方法上的同步,也就是说在他自己的方法里进行了同步,两个线程同时调用一个方法的时候不会出现问题,但如果一个线程里要想多次操作 vector而且不想在这个过程中被其他线程打扰的话,仍然需要手动加锁来控制.

所以除了必须要写java1.0/1.1兼容的代码,否则完全可以不考虑Vector

4) 在多线程访问的时候需要用到同步,一般情况下不用考虑.而且ArrayList的出现就是用来取代vector,在同步的情况下,可以使用下面的方法来得 到一个同步了的List

List   list   =   Collections.synchronizedList(new   ArrayList());

synchronized(list) {

Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext()) foo(i.next());
}
取值的时候必须在synchronized中

 

感觉ArrayList的使用率要比Vector高很多, 而且它还可以适当地利用同步, 同LinkList 也是后起之秀, 有着不一般的效率

分享到:
评论

相关推荐

    精品推荐-2024年ClickHouse技术最佳应用实践资料(脱敏)PPT合集(30份).zip

    2024年ClickHouse技术最佳应用实践资料(脱敏)PPT合集,30份。 1、Clickhouse在安全行业产品的落地实践 2、vivo OLAP发展与应用实践 3、阿里云ClickHouse 企业版云原生Serverless 介绍 4、ClickHouse在vivo ABTest的应用实践 5、NineData面向ClickHouse数据集成实践 6、ClickHouse与大模型 7、ClickHouse数据管理与同步的关键技术 8、ClickHouse在可观测性的应用实践和优化 9、阿里云上ClickHouse存算分离架构分享 10、Clickhouse数据迁移踩坑与最佳实践分享 11、ClickHouse在B站标签和多维分析场景的实践 12、基于Clickhouse的DataOps实践 ……等等30份。

    【高创新】基于鲸鱼优化算法WOA-TCN-Attention的用负荷预测算法研究Matlab实现.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    【高创新】基于金枪鱼优化算法TSO-CNN-BiLSTM-Attention的用客流量预测算法研究Matlab实现.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    学生宿舍管理规定.docx

    学生宿舍管理规定.docx

    【高创新】基于沙猫群优化算法SCSO-CNN-BiLSTM-Attention的用客流量预测算法研究Matlab实现.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    基于Vue的工程项目全寿期一体化综合管理系统设计源码

    本项目是基于Vue开发的工程项目全寿期一体化综合管理系统,包含1095个文件,其中包括761个Vue组件文件、151个JavaScript脚本文件、92个PNG图像文件、35个CSS样式表文件、18个Markdown文档文件、12个LESS样式表文件、4个JSON配置文件、2个gitignore文件、2个XML配置文件和2个WOFF字体文件。该项目旨在为工程管理行业提供一个全面的综合管理平台,支持项目立项、招投标、预算成本、项目规划、项目进度、项目分包、项目合同、进度、财务、材料、设备、采购、出库、库存、劳务结算、机械、质量、安全、物联网等全寿期一体化的管理。该项目助力工程管理行业的数字化转型,提高项目管理效率和质量。

    全国计算机等级考试三级网络技术真题及详解一

    内容概要:本文包含多道针对全国计算机等级考试三级网络技术的试题及其详细解答,内容涵盖多种网络技术和协议的理解与运用,如:弹性分组环(RPR)技术、IP地址与子网掩码配置、IPv6地址简写规则、内部网关协议区别、局域网设备功能、IEEE 802.16协议用途等重要知识点,有助于提高备考考生在网络技术方面的理论和实践经验。 适合人群:正准备参加全国计算机等级考试《三级网络技术》的学员。 使用场景及目标:通过对题目与答案的研究熟悉网络基础知识、常用硬件设备以及互联网相关协议的实际操作技巧,加深理解记忆重点概念。 其他说明:文章中有大量具体的考题案例可供练习和巩固所学内容,适合自我测评和检验复习效果时对照参考。

    最近在用Wireshark抓包工具的时候,老感觉这东西用起来很简单,功能强大,所以想了解他的实现原理_ipattr.zip

    最近在用Wireshark抓包工具的时候,老感觉这东西用起来很简单,功能强大,所以想了解他的实现原理_ipattr

    r语言+可视化_r-.zip

    r语言+可视化_r-

    基于Android Studio开发的人脸识别考勤系统源代码+数据库+使用说明

    1.客户端的实现: 程序采用Android Studio开发,调试、运行环境为小米手机3(Android 6.0)。 (1)界面实现: 主界面抽屉布局采用DrawerLayout实现,浮动按钮为FloatingActionButton,状态栏为ToolBar。 历史界面采用RecyclerView配合CardView实现。 a.为实现在状态栏打开时按返回关闭而不是退出程序,重写onBackPressed()方法: public void onBackPressed() { if (drawerLayout.isDrawerOpen(GravityCompat.START)) { drawerLayout.closeDrawer(GravityCompat.START); } else { super.onBackPressed(); } } b.传统的单Activity对应多Fragment实现方法是:在一个FrameLayout中,每切换一个Fragment,就把要切换的Fragment放在最顶层,这种方法相当

    变压器变频器配电柜电路控制原理图CAD施工图纸设备控制图某PLC接线全套图纸

    变压器变频器配电柜电路控制原理图CAD施工图纸设备控制图某PLC接线全套图纸

    医院伦理委员会违背方案报告审查工作表.doc

    医院伦理委员会违背方案报告审查工作表.doc

    09211800.py

    09211800.py

    2023-2024华为ICT大赛网络赛道国赛模拟真题

    2023-2024华为ICT大赛网络赛道国赛模拟真题

    使用微信查看Windows电脑IP给电脑下指令

    使用微信可以查看电脑IPv6,IP。对电脑下指令,并且将返回信息返回给微信。

    基于SpringBoot+Vue.JS前后端分离的校园志愿者服务管理系统 源码+数据库+录屏(毕业设计)

    校园志愿者服务管理系统是一个高效、便捷的平台,旨在促进校园内志愿服务活动的组织和管理。该系统采用现代的Vue.js前端框架和强大的SpringBoot后端框架进行开发,确保了系统的高性能和良好的用户体验。Vue.js提供了响应式和组件化的用户界面,使得界面设计既美观又易于维护。SpringBoot则简化了后端服务的配置和部署,提高了开发效率。系统功能包括志愿者注册、活动发布、报名管理、时间记录和认证等,支持多种角色操作,如管理员、志愿者和活动组织者,以满足不同用户的需求。通过这个系统,校园内的志愿服务活动可以更加有序地进行,同时也方便了志愿者的参与和管理。 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ

    小程序&模版&智能家居&智能用电(源码+截图+源码导入教程和视频).zip

    小程序&模版&智能家居&智能用电(源码+截图+源码导入教程和视频).zip

    【高创新】基于引力搜索优化算法GSA-CNN-BiLSTM-Attention的用客流量预测算法研究Matlab实现.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    基于Java的电子图书管理系统设计源码

    本项目是基于Java开发的电子图书管理系统,包含38个文件,其中包括10个XML配置文件、10个Java源代码文件、4个Preferences文件、2个gitignore文件、2个JSP页面文件、1个Classpath文件、1个MyMetadata文件、1个Project文件、1个JSDTScope文件和1个Component文件。该项目旨在为用户提供一个便捷、高效的管理电子图书的平台,支持图书分类、搜索、借阅等功能,以提高图书馆的管理效率和用户体验。

    变压器变频器配电柜电路控制原理图CAD施工图纸设备控制图某泵站建筑照明电气设计

    变压器变频器配电柜电路控制原理图CAD施工图纸设备控制图某泵站建筑照明电气设计

Global site tag (gtag.js) - Google Analytics