本文非常详尽地介绍了Java中的三个集合类 ArrayList,Vector与Stack ”Java集合详解系列“是我在完成Java基础篇的系列博客后准备开始写的新系列。...与数组一样,它包含可以使用整数索引进行访问的组件。不过,Vector的大小是可以增加或者减小的,以便适应创建Vector后进行添加或者删除操作。...ensureCapacityHelper(elementCount + 1); // elementData[elementCount++] = obj; // } 初始容量和扩容 扩容方式与ArrayList...ArrayList和Vector的区别 ArrayList是线程非安全的,这很明显,因为ArrayList中所有的方法都不是同步的,在并发下一定会出现线程安全问题。...,它是ArrayList的线程安全版本,其实现90%和ArrayList都完全一样,区别在于: 1、Vector是线程安全的,ArrayList是线程非安全的 2、Vector可以指定增长因子,如果该增长因子指定了
绿色部分内容已经很少用了,但在面试题中有可能会问到,我们来看一个经常出现的面试题:Arraylist与Vector的区别是什么?...首先我们给出标准答案: 1、Vector是线程安全的,ArrayList不是线程安全的。 2、ArrayList在底层数组不够用时在原来的基础上扩展0.5倍,Vector是扩展1倍。...看上图Vector和ArrayList一样,都继承自List,来看一下Vector的源码 实现了List接口,底层是数组实现 实现了List接口,底层和ArrayList一样,都是数组来实现的...先看ArrayList的remove方法 再看Vector的remove方法 方法实现上也一样,就是多了一个synchronized关键字,再看看ArrayList的get方法...和ArrayList和Vector一样,同样的类似关系的类还有HashMap和HashTable,StringBuilder和StringBuffer,后者是前者线程安全版本的实现。
ArrayList与Vector都是java的集合类,都是实现了List接口的实现类 一:同步性: Vector是同步的,该类的方法保证了Vector对象是线程安全的,而ArrayList是异步的,因此...ArrayList中的对象并不是线程安全的,因为同步的要求会影响执行的效率。...所以如果比不需要线程安全的集合,那么应该毫不犹豫的使用ArrayList,这样可以避免由于同步带了的不必要的开下。...二:数据增长: 从内部实现机制来讲,ArrayList和Vector都是使用数组来控制集合中的对象,当你向这两种类型中增加元素的时候,如果元素的数目超出了目前数组的长度,它们都需要扩展内部数组的长度,Vector...ArrayList增长为原来50%,所以见你最后获得的这个集合所占的空间,总是比你实际需要的更大。
ArrayList、LinkedList与Vector的对比 从图中可以看出,这三者都实现了 List 接口.所有使用方式也很相似,主要区别在于因为实现方式的不同,所以对不同的操作具有不同的效率。...ArrayList 是一个可改变大小的数组.当更多的元素加入到ArrayList中时,其大小将会动态地增长.内部的元素可以直接通过get与set方法进行访问,因为ArrayList本质上就是一个数组....LinkedList 是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList....Vector和ArrayList在更多元素添加进来时会请求更大的空间。Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%....Vector Vector和ArrayList几乎是完全相同的,唯一的区别在于Vector是同步类(synchronized).因此,开销就比ArrayList要大.正常情况下,大多数的Java程序员使用
Vector 类的所有方法都是同步的。...可以由两个线程安全地访问一个 Vector对象.但是一个线程访问Vector 的话代码要在同步操作上耗费大量的时间 ArrayList不是同步的,所以在不需要保证线程安全时时建议使用ArrayList...Vector 主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况
ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.util.*; /** * 演示Vector的使用。...包括Vector的创建、向Vector中添加元素、从Vector中删除元素、 * 统计Vector中元素的个数和遍历Vector中的元素。...Vector 类提供的访问方法支持类似数组运算和与Vector 大小相关的运算。类似数组的运算允许向量中增加,删除和插入元素。...它们也允许测试矢量的内容和检索指定的元素,与大小相关的运算允许判定字节大小和矢量中元素不数目。 ...protected void removeRange(int fromIndex, int toIndex) 从此 List 中移除其索引位于 fromIndex(包括)与 toIndex(不包括)
引子:首先不得不说, Vector 与 Stack 这一对继承设计是蹩脚、失败的。 ---- 比如见于 coderanch 的一个问题: Stack extends Vector ! ...ArrayList 以及 ArrayQueue。...一些与早期版本捆绑在一起的 Java 类并没有经过深思熟虑。它们并没有经过同行评议和公共审查。例如通过 Java Community Process 、开源项目以及协会项目发布的一些库。...For example: Deque stack = new ArrayDeque(); ArrayList ? ...至于 ArrayList,其在 JDK 1.2 时加入 Java 标准类库。我们完全可以将其认为是没有进行同步操作的可变大小数组容器。
ArrayList Vector LinkedList 区别与用法 ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计...和LinkedList一样,ArrayList也是非同步的(unsynchronized)。 Vector类 Vector非常类似ArrayList,但是Vector是同步的。...由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的, 当一个Iterator被创建而且正在被使用,另一个线程改变了Vector...同步性 Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。...数据增长 从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。
ArrayList和Vector异同点 相同点: 底层都是数组 //ArrayList transient Object[] elementData; //Vector protected Object...[] elementData; 默认大小都是10 //Vector public Vector() { this(10); } //ArrayList private static final...int DEFAULT_CAPACITY = 10; public ArrayList(int initialCapacity) { if (initialCapacity > 0) {...elementData[size++] = e; return true; } //Vector线程安全,例如,加了synchronized关键字 public synchronized...close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); } //Vector
ArrayList特点:底层使用数组数据结构,查询速度快(使用脚标查),插入删除慢(索引要改变) LinkedList特点:底层使用链表数据结构,查询慢(需要一个一个去问),插入删除快 Vector特点...:底层是数组数据结构,线程同步,被ArrayList替代了 ArrayList import java.util.ArrayList; public class ArrayListDemo {...getSingleArray(ArrayList array){ ArrayList res=new ArrayList(); for(Object obj:array...有关的,枚举 import java.util.Enumeration; import java.util.Vector; /** * Vector demo * @author taoshihan...(); v.add("vector1"); v.add("vector2"); v.add("vector3"); Enumeration
数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半 同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 这个我们可以看看他们的源码就可以知道...: ArrayList的size()方法: 1 /** 2 * Returns the number of elements in this list. 3 * 4 * @...elementCount; 8 } 其实Vector的其他很多方法都是同步的: 1 /** 2 * Sets the size of this vector....下面给出ArrayList线程不安全证明方案: 1 /** 2 * 3 */ 4 package com.b510; 5 6 import java.util.ArrayList;...的源码: ArrayList:grow() 1 /** 2 * Increases the capacity to ensure that it can hold at least the
线程安全性不同 ArrayList和LinkedList都不是线程安全的,但是Vector是线程安全的,其底层是用了大量的synchronized关键字,效率不是很高。...扩容机制 ArrayList和Vector底层都是使用数组Object[]来存储,当向集合中添加元素的时候,容量不够了,会触发扩容机制,ArrayList扩容后的容量是按照1.5倍扩容,而Vector...Vector可以设置每次扩容的增加容量,但是ArrayList不可以。...和ArrayList在单线程环境其实差不多,多线程环境会比较明显,这里就不测试了: ArrayList :18 LinkedList :61480 Vector :21 测试删除操作的代码如下,删除的时候我们是不断删除第...ArrayList: 7177 LinkedList: 34 Vector: 6713 下面来测试一下,vector多线程的环境,首先两个线程,每个删除5w元素: package com.aphysia.offer
Vector类 Vector非常类似ArrayList,但是Vector是同步的。...由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态...使用场景比较 1) 同步性 Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。 ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。...2) 数据增长 从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。...参考推荐: ARRAYLIST VECTOR LINKEDLIST区别 ArrayList、LinkedList、Vector的关系和区别 Java 集合类Array、List、Map区别和联系 C
今天我们从相同点、不同点、以及JDK源码等各个方面来深入解析下,底层使用数组实现的两个集合类:ArrayList与Vector的区别与联系 区别与联系: 1.ArrayList出现于jdk1.2,vector...(2)解析Vector扩容源码 ①首先调用add方法,与arraylist相同,vector也有一个继承父类的成员变量modCount来记录修改次数。...其中, capacityIncrement为自定义的增长因子(此处与arrayList不同,arraylist默认增长1.5倍;vector可以自定义若不自定义,则增长2倍,若定义则新长度=之前的长度...数组长度等于实际元素个数 Vector: (1)Vector v1 = new Vector(10,2); 指定初始长度(initialCapacity)与增长因子(capacityIncrement...,另外,性能上的差别还体现在底层的Object数组上 vector: arrayList: 可以看出来,arrayList多了一个transient关键字,这个关键字的作用是防止序列化,然后在ArrayList
Vector、ArrayList、LinkedList均为线型的数据结构,但是从实现方式与应用场景中又存在差别。...1 底层实现方式 ArrayList内部用动态数组来实现;LinkedList内部采用双向链表实现;Vector内部用是 Java 早期提供的线程安全的动态数组实现。...Vector与ArrayList仅在插入元素时容量扩充机制不一致(扩容大小为原来的1倍)。...4 线程安全性 ArrayList、LinkedList为非线程安全;Vector是基于synchronized实现的线程安全的ArrayList。...需要注意的是:单线程应尽量使用ArrayList,Vector因为同步会有性能损耗;即使在多线程环境下,我们可以利用Collections这个类中为我们提供的==synchronizedList(List
Vector 内部是使用对象数组来保存数据,可以根据需要自动的增加容量,当数组已满时,会创建新的数组,并拷贝原有数组数据。 ...ArrayList 是应用更加广泛的动态数组实现,它本身不是线程安全的,所以性能要好很多。...与 Vector近似,ArrayList 也是可以根据需要调整容量,不过两者的调整逻辑有所区别,Vector 在扩容时会提高 1 倍,而 ArrayList 则是增加 50%。 ...谈谈不同容器类型适合的场景: Vector 和 ArrayList 作为动态数组,其内部元素以数组形式顺序存储的,内存为一连续的区域,所以非常适合随机访问的场合。
,LinkedList,Vector的特性 /** * 有序集合List接口的实现类LinkedLIst,ArrayList,Vector,Stack * (1)ArrayList...* (2)Vector与ArrayList一样,也是通过数组实现的。不同的是它支持线程的同步,即一时刻只有一个线程能够写Vector, * 避免多线程同时写引起的不一致性。...但实现同步需要很高的花费, 因此,访问它比访问ArrayList慢。 * 2.1 Vector和ArrayList在更多元素添加进来时会请求更大的空间。...Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%....* 2.2 Vector和ArrayList都是用数组实现的,所以,在添加和插入时,最好从表尾操作,而不要从中间或者表头开始,以避免数组移动引起的开销!
对比Vector、 ArrayList、 LinkedList有何区别?...ArrayList 是应用更广泛的动态数组,本身不是线程安全的,与 Vector 相似, ArrayList 也是可以根据需要调整容量,不过两者间的调整有区别,Vector 在扩容时提高一倍, ArrayList...Vector、 ArrayList、 LinkedList均为线型的数据结构,但是从实现方式与应用场景中又存在差别,可以从下面几个方面总结。...Vector与ArrayList仅在插入元素时容量扩充机制不一致。...线程安全性 ArrayList、 LinkedList为非线程安全; Vector是基于synchronized实现的线程安全的ArrayList。
ArrayList与LinkedList 主要区别 ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。...Vector public class Vector extends AbstractList implements List, RandomAccess, Cloneable, Serializable...Vector和ArrayList几乎是一样的,区别在于Vector是线程安全的,因为这个原因,它的性能较ArrayList差。...通常情况下,大部分程序员都使用ArrayList,而不是Vector,因为他们可以自己做出明确的同步操作。 Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。...但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。
ArrayList, LinkedList, Vector - dudu:史上最详解 我们来比较一下ArrayList, LinkedLIst和Vector它们之间的区别。...2.Vector 之所以把Vector放在这里的原因是因为Vector和ArrayList是否类似,但是它是属于线程同步(支持并发)的数组,并且内部值也可以为null。...概括起来大概是这个样子: ArrayList和Vector它们底层实现为数组,值可为null, ArrayList不支持并发,Vector支持并发; LinkedList底层基于双链表,因此在add/remove...和ArrayList是否类似,Vector是一个可变大小的数组。...和ArrayList相比,不同之处在于Vector的很多方法都加了关键字synchronized,使得Vector具有了同步功能,支持并发。
领取专属 10元无门槛券
手把手带您无忧上云