1、 ArrayList底层是采用数组实现的(并且改数组的类型是Object类型的)2 如果是jdk6的话,采用Array.of()方法来生成一个新的数组,如果是jdk5.0的话,使用的是System.arraycopy方法(将数组拷贝)
3 、List list = new ArrayList();时,底层会生成一个长度为10的数组来存放对象,如果预先知道list
会存放多少个对象的话,最好通过new ArrayList(int length)的方式先确定数组的最小长度,如new
ArrayList(50),这样能提高底层的效率。
4 、对于ArrayList与Vector来说,底层都是采用数组方式来实现的(该数组是一个Object类型的数组)
5、 对于ArrayList,所有方法都不是同步的,对于Vector,大部分是public的方法都是同步的。
6、LinkedList底层是由双向循环链表实现的,对于ArrayList,查找速度非常快,增加和删除操作非常
慢。(本质上是由数组的特点来决定的)
7、对于LinkList,查找速度非常慢,增加和删除操作非常快。(本质上是由双向循环链表的特点来决定
的)
一、同步性

ArrayList,LinkedList是不同步的,而Vestor是的。所以如果要求线程安全的话,可以使用ArrayList或LinkedList,可以节省为同步而耗费开销。但在多线程的情况下,有时候就不得不使用Vector了。当然,也可以通过一些办法包装ArrayList,LinkedList,使他们也达到同步,但效率可能会有所降低。

二、数据增长
从内部实现机制来讲ArrayList和Vector都是使用Objec的数组形式来存储的。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。

三、检索、插入、删除对象的效率

ArrayList和Vector中,从指定的位置(用index)检索一个对象,或在集合的末尾插入、删除一个对象的时间是一样的,可表示为O(1)。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行(n-i)个对象的位移操作。
LinkedList中,在插入、删除集合中任何位置的元素所花费的时间都是一样的—O(1),但它在索引一个元素的时候比较慢,为O(i),其中i是索引的位置。

所以,如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是对其它指定位置的插入、删除操作,最好选择LinkedList

转载于:https://www.cnblogs.com/downey/p/4915334.html

ArrayList、LinkedList、Vector的区别相关推荐

  1. ArrayList,LinkedList,Vector的异同点

    先总结下ArrayList和LinkedList的区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayLi ...

  2. ArrayList, LinkedList, Vector - dudu:史上最详解

    ArrayList, LinkedList, Vector - dudu:史上最详解 我们来比较一下ArrayList, LinkedLIst和Vector它们之间的区别.BZ的JDK版本是1.7.0 ...

  3. ArrayList ,LinkedList,Vector,StringBuilder,StringBuffer ,String,HashMap,LinkedHashMap,TreeMap

    ArrayList ,LinkedList,Vector 区别和联系 从上面的类层次结构图中,我们可以发现他们都实现了List接口,它们使用起来非常相似.区别主要在于它们各自的实现,不同的实现导致了不 ...

  4. ArrayList和Vector的区别

    这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素, ...

  5. java vector arraylist linkedlist用法与区别

    首先,它们是list的实现类,大致说一下vector arraylist linkedlist的区别. 1.线程安全来讲, vector是线程安全,arraylist linkedlist线程不安全. ...

  6. ArrayList 和 Vector 的区别

    ArrayList 和 Vector 的区别是什么? Vector 的方法都是同步的,线程安全:ArrayList 非线程安全,但性能比Vector好 默认初始化容量都是10,Vector 扩容默认会 ...

  7. 一分钟了解ArrayList和Vector的区别

    一.是否是线程安全的 Vector是同步的, 而ArrayList不是. 因为Vector是同步的, 所以它是线程安全的. 同样, 因为Vecotr是同步的, 所以他需要额外的开销来维持同步锁, 所以 ...

  8. Java中ArrayList和Vector的区别

    首先想说的是: Vector是在Collections API之前就已经产生了的, 而ArrayList是在JDK1.2的时候才作为Collection framework的一部分引入的. 它们都是在 ...

  9. Java ArrayList和Vector、LinkedList与ArrayList、数组(Array)和列表集合(ArrayList)的区别...

    ArrayList和Vector的区别 ArrayList与Vector主要从二方面来说. 一.同步性: Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的. ...

  10. ArrayList与LinkedList、Vector的区别 HashMap与HashTable、HashSet的区别

    一.ArrayList 和 LinkedList区别: (1)两者都是线程不安全,都实现了Collection接口. (2)数据结构:ArrayList是基于动态数组的数据结构,LinkedList是 ...

最新文章

  1. TP-link 841N 刷DD-WRT固件
  2. 关于学习Python的一点学习总结(2->列表)
  3. 定义一个有参宏判断一个字符是否在0~9之间
  4. Grafana关键表结构分析
  5. f(f(x)) = -x
  6. Php 链式执行,PHP实现链式操作的三种方法详解
  7. Linux服务器安全防护十个方面
  8. (44)Xilinx ROM IP核配置(五)(第9天)
  9. 选择排序 介绍与java实现
  10. 【GNN综述】图神经网络的解释性综述
  11. java去除 r_Android apk瘦身最佳实践(一):去除R.class
  12. 太强了,头发丝完整保留!一个开源的 Python 实时视频抠图工具
  13. 解决smtp出现(500, b'Error: bad syntax')
  14. 傲梅分区助手克隆Linux硬盘,傲梅分区助手复制磁盘或克隆磁盘到另外磁盘
  15. rs232接口_RS232串口通信:接口定义、标准接法详细说明,一看就懂了
  16. 2021-12-11 根据单词首字母查找单词
  17. 支付宝android 10.0.8,分享10.0.8版支付宝开启和关闭小额免密支付功能方法
  18. 自动生成条形码软件如何批量打印可变条码
  19. 埃及分数c 语言程序,C语言将真分数分解为埃及分数
  20. 【Matlab系列】Matlab信号添加噪声及信噪比SNR的计算

热门文章

  1. [MySQL光速入门]012 作业解答
  2. 学JS的心路历程-Promise(一)
  3. Linux有问必答:如何检查Linux的内存使用状况
  4. linux下mysql开启远程访问权限及防火墙开放3306端口(mysql开放host访问权限)
  5. pdf在浏览器的显示问题
  6. node-inspector使用方法
  7. CentOS 7下安装Logstash ELK Stack 日志管理系统(上)
  8. mesos资源动态分配测试
  9. 遍历聚合对象中的元素——迭代器模式(二)
  10. 当程序开发人员开始抛弃技术时,是否意味着噩梦的开始?抛弃了SQL Server 2000才发现客户的简单问题真的很难解决...