Java的List接口有3个实现类,分别是ArrayList、LinkedList、Vector,他们用于存放多个元素,维护元素的次序,而且允许元素重复。

3个具体实现类的区别如下:

1. ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除,允许空元素

2. Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。

3. LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,接口中没有定义的方法get,remove,insertList,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建 List时构造一个同步的List:

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

查看Java源代码,发现当数组的大小不够的时候,需要重新建立数组,然后将元素拷贝到新的数组内,ArrayList和Vector的扩展数组的大小不同。

ArrayList中:

1 public booleanadd(E e) {2

3 ensureCapacity(size + 1); //增加元素,判断是否能够容纳。不能的话就要新建数组

4

5 elementData[size++] =e;6

7 return true;8

9 }10

11 public void ensureCapacity(intminCapacity) {12

13 modCount++;14

15 int oldCapacity =elementData.length;16

17 if (minCapacity >oldCapacity) {18

19 Object oldData[] = elementData; //此行没看出来用处,不知道开发者出于什么考虑

20

21 int newCapacity = (oldCapacity * 3)/2 + 1; //增加新的数组的大小

22

23 if (newCapacity

25 newCapacity =minCapacity;26

27 //minCapacity is usually close to size, so this is a win:

28

29 elementData =Arrays.copyOf(elementData, newCapacity);30

31 }32

33 }

Vector中:

1 private void ensureCapacityHelper(intminCapacity) {2

3 int oldCapacity =elementData.length;4

5 if (minCapacity >oldCapacity) {6

7 Object[] oldData =elementData;8

9 int newCapacity = (capacityIncrement > 0) ?

10

11 (oldCapacity + capacityIncrement) : (oldCapacity * 2);12

13 if (newCapacity

15 newCapacity =minCapacity;16

17 }18

19 elementData =Arrays.copyOf(elementData, newCapacity);20

21 }22

23 }

关于ArrayList和Vector区别如下:

1. ArrayList在内存不够时默认是扩展50% + 1个,Vector是默认扩展1倍。

2. Vector提供indexOf(obj, start)接口,ArrayList没有。

3. Vector属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统开销。

java vector实现的接口_java的List接口的实现类 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. java vector实现的接口_java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析...

    java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...

  5. java list 接口_Java 集合 List接口

    [TOC] List接口 概述有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的 ...

  6. php接口和java接口_java和php接口的区别是什么

    java和php接口的区别是:1.php接口中的抽象方法只能是public的,默认也是public权限:2.java中私有方法使用private修饰,供接口中的默认方法或者静态方法调用. [相关学习推 ...

  7. java抽象类和接口_Java抽象类和接口类

    Java中接口和抽象类的区别是什么?什么时候用接口?什么时候用抽象类?抽象类和接口存在的意义是什么?能解决哪些编程问题? 1)类关键字修饰符: 抽象类使用abstract修饰,含有抽象方法(使用abs ...

  8. java调用php接口_java 如何调用接口

    在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适,所以,问题来了,java如何调用接口?很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接 ...

  9. java 类 抽象类 接口_Java抽象类和接口

    抽象类和接口 一.抽象类和抽象方法 对于抽象类,首先需要介绍抽象方法,而抽象类因抽象方法的存在而存在 1.抽象方法 (1)必要性: 有些父类方法不确定如何写方法体,但是对于继承它的子类又必须用到这个方 ...

最新文章

  1. mysql 获取游标索引_MYSQL视图 事务 游标 索引及其使用
  2. 【学时总结】◆学时·VIII◆ 树形DP
  3. rsa php前面,PHP使用非对称加密算法(RSA)
  4. MODE ——计算了 任意多个数字的平均值(知识点:for的循环)
  5. tomcat 软连接
  6. P3 Simulink仿真-《Matlab/Simulink与控制系统仿真》程序指令总结
  7. linux关闭硬件蜂鸣器,linux 关闭主板上的蜂鸣器声音
  8. Linux 编译时查找错误字符,编译Linux内核时出现“fatal error: linux/netfilter/xt_dscp: No such file or directory”...
  9. 字符串char与string转换
  10. python属性管理(1):基础
  11. 用好这两大office模板资源网,办公轻松又高效
  12. ios下js复制到粘贴板_js实现复制到剪贴板功能,兼容所有浏览器
  13. vm虚拟机安装win7出现 Error loading image cdmenu.ezb
  14. 我用英语了结你的一生1
  15. 什么样的企业适合用EV证书呢?
  16. 解决Mac系统更新后,SVN无法使用的问题
  17. Greeplum+GPTest
  18. 用Python制作一个文件加密器(支持中文)
  19. C++程序设计原理与实践 习题答案 第二十六章 第26章习题答案
  20. VO,PO,BO,QO, DAO ,POJO,的概念

热门文章

  1. Flink java作为消费者连接虚拟机中的kafka/或本地的kafka,并解决java.net.UnknownHostException报错
  2. 推荐系统学习(四)推荐系统学习资料(补充中...)
  3. php中修改元素值为5,php怎么改变元素数组的值
  4. 不实用额外变量 交换_变量交换:巧用异或运算
  5. 【转】TCP/IP协议——ARP详解
  6. 电商面试经验(mybatis)
  7. 函数的参数 2018-3-27
  8. 正则判断windows文件路径是否正确
  9. 网页web前端学习技巧
  10. leetcode @python 120. Triangle