java vector实现的接口_java的List接口的实现类 ArrayList,LinkedList,Vector 的区别
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 的区别相关推荐
- ArrayList,LinkedList,Vector的异同点
先总结下ArrayList和LinkedList的区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayLi ...
- ArrayList, LinkedList, Vector - dudu:史上最详解
ArrayList, LinkedList, Vector - dudu:史上最详解 我们来比较一下ArrayList, LinkedLIst和Vector它们之间的区别.BZ的JDK版本是1.7.0 ...
- ArrayList ,LinkedList,Vector,StringBuilder,StringBuffer ,String,HashMap,LinkedHashMap,TreeMap
ArrayList ,LinkedList,Vector 区别和联系 从上面的类层次结构图中,我们可以发现他们都实现了List接口,它们使用起来非常相似.区别主要在于它们各自的实现,不同的实现导致了不 ...
- java vector实现的接口_java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析...
java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...
- java list 接口_Java 集合 List接口
[TOC] List接口 概述有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的 ...
- php接口和java接口_java和php接口的区别是什么
java和php接口的区别是:1.php接口中的抽象方法只能是public的,默认也是public权限:2.java中私有方法使用private修饰,供接口中的默认方法或者静态方法调用. [相关学习推 ...
- java抽象类和接口_Java抽象类和接口类
Java中接口和抽象类的区别是什么?什么时候用接口?什么时候用抽象类?抽象类和接口存在的意义是什么?能解决哪些编程问题? 1)类关键字修饰符: 抽象类使用abstract修饰,含有抽象方法(使用abs ...
- java调用php接口_java 如何调用接口
在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适,所以,问题来了,java如何调用接口?很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接 ...
- java 类 抽象类 接口_Java抽象类和接口
抽象类和接口 一.抽象类和抽象方法 对于抽象类,首先需要介绍抽象方法,而抽象类因抽象方法的存在而存在 1.抽象方法 (1)必要性: 有些父类方法不确定如何写方法体,但是对于继承它的子类又必须用到这个方 ...
最新文章
- mysql 获取游标索引_MYSQL视图 事务 游标 索引及其使用
- 【学时总结】◆学时·VIII◆ 树形DP
- rsa php前面,PHP使用非对称加密算法(RSA)
- MODE ——计算了 任意多个数字的平均值(知识点:for的循环)
- tomcat 软连接
- P3 Simulink仿真-《Matlab/Simulink与控制系统仿真》程序指令总结
- linux关闭硬件蜂鸣器,linux 关闭主板上的蜂鸣器声音
- Linux 编译时查找错误字符,编译Linux内核时出现“fatal error: linux/netfilter/xt_dscp: No such file or directory”...
- 字符串char与string转换
- python属性管理(1):基础
- 用好这两大office模板资源网,办公轻松又高效
- ios下js复制到粘贴板_js实现复制到剪贴板功能,兼容所有浏览器
- vm虚拟机安装win7出现 Error loading image cdmenu.ezb
- 我用英语了结你的一生1
- 什么样的企业适合用EV证书呢?
- 解决Mac系统更新后,SVN无法使用的问题
- Greeplum+GPTest
- 用Python制作一个文件加密器(支持中文)
- C++程序设计原理与实践 习题答案 第二十六章 第26章习题答案
- VO,PO,BO,QO, DAO ,POJO,的概念
热门文章
- Flink java作为消费者连接虚拟机中的kafka/或本地的kafka,并解决java.net.UnknownHostException报错
- 推荐系统学习(四)推荐系统学习资料(补充中...)
- php中修改元素值为5,php怎么改变元素数组的值
- 不实用额外变量 交换_变量交换:巧用异或运算
- 【转】TCP/IP协议——ARP详解
- 电商面试经验(mybatis)
- 函数的参数 2018-3-27
- 正则判断windows文件路径是否正确
- 网页web前端学习技巧
- leetcode @python 120. Triangle