精华内容
下载资源
问答
  • ArrayList和Vector区别

    2019-03-01 18:17:47
    ArrayList和Vector区别 collection集合 ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap 相同点: 1、ArrayList和Vector都是继承了相同的父类...

    ArrayList和Vector区别

    collection集合

    ├List
    │├LinkedList
    │├ArrayList
    │└Vector
    │ └Stack
    └Set

    Map
    ├Hashtable
    ├HashMap
    └WeakHashMap

    相同点:

    1、ArrayList和Vector都是继承了相同的父类(AbstractList )和实现了相同的接口(List)。
    2、底层都是数组(Object[])实现的
    3、初始默认长度都为10。

    区别:

    1、线程安全:
    Vector中的许多方法多数添加了synchronized关键字,来确保线程安全。Vector线程安全,ArrayList线程不安全。
    2、扩容方式:
    ArrayList以1.5倍的方式在扩容。Vector 当扩容容量增量大于0时、新数组长度为原数组长度+扩容容量增量、否则新数组长度为原数组长度的2倍。
    3、效率:
    如果不考虑到线程的安全因素,一般用Arraylist效率比较高。
    4、内存空间
    当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

    扩容方式不同

    ArrayList的扩容方法:grow()
    ArrayList以1.5倍的方式在扩容

     /**
         * Increases the capacity to ensure that it can hold at least the
         * number of elements specified by the minimum capacity argument.
         *
         * @param minCapacity the desired minimum capacity
         */
        private void grow(int minCapacity) {
            // overflow-conscious code
            int oldCapacity = elementData.length;
            int newCapacity = oldCapacity + (oldCapacity >> 1);
            if (newCapacity - minCapacity < 0)
                newCapacity = minCapacity;
            if (newCapacity - MAX_ARRAY_SIZE > 0)
                newCapacity = hugeCapacity(minCapacity);
            // minCapacity is usually close to size, so this is a win:
            elementData = Arrays.copyOf(elementData, newCapacity);
        }
    

    Vector的扩容方法:grow()
    Vector当扩容容量增量大于0时、新数组长度为原数组长度+扩容容量增量、否则新数组长度为原数组长度的2倍。

     private void grow(int minCapacity) {
            // overflow-conscious code
            int oldCapacity = elementData.length;
            int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
                                             capacityIncrement : oldCapacity);
            if (newCapacity - minCapacity < 0)
                newCapacity = minCapacity;
            if (newCapacity - MAX_ARRAY_SIZE > 0)
                newCapacity = hugeCapacity(minCapacity);
            elementData = Arrays.copyOf(elementData, newCapacity);
        }
    
    展开全文
  • arraylist和vector区别

    2019-10-17 09:29:13
    首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayListVector和LinkedList。List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。3个具体实现类的相关区别如下: ArrayList是最...

    https://www.cnblogs.com/williamjie/p/11158523.html

    首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList、Vector和LinkedList。List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。3个具体实现类的相关区别如下:

        ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
        Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。
        LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。
        vector是线程(Thread)同步(Synchronized)的,所以它也是线程安全的,而Arraylist是线程异步(ASynchronized)的,是不安全的。如果不考虑到线程的安全因素,一般用Arraylist效率比较高。
    
        如果集合中的元素的数目大于目前集合数组的长度时,vector增长率为目前数组长度的100%,而arraylist增长率为目前数组长度
        的50%.如过在集合中使用数据量比较大的数据,用vector有一定的优势。
    
        如果查找一个指定位置的数据,vector和arraylist使用的时间是相同的,都是0(1),这个时候使用vector和arraylist都可以。而
        如果移动一个指定位置的数据花费的时间为0(n-i)n为总长度,这个时候就应该考虑到使用Linkedlist,因为它移动一个指定位置的数据
        所花费的时间为0(1),而查询一个指定位置的数据时花费的时间为0(i)。
        ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,
        都允许直接序号索引元素,但是插入数据要设计到数组元素移动 等内存操作,所以索引数据快插入数据慢,
        Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差
        ,LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快!
    
        笼统来说:LinkedList:增删改快
                      ArrayList:查询快(有索引的存在)
    
    1. Vector & ArrayList

    1) Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
    2) 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

    1. Hashtable & HashMap
      Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。
    1. ArrayList & LinkedList

    ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别:
    从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列 数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能; 而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中 间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。

    如果在编程中,1、2两种情形交替出现,这时,你可以考虑使用List这样的通用接口,而不用关心具体的实现,在具体的情形下,它的性能由具体的实现来保证。

    1. 配置集合类的初始大小
      在Java集合框架中的大部分类的大小是可以随着元素个数的增加而相应的增加的,我们似乎不用关心它的初始大小,但如果我们考虑类的性能问题时,就一定要考虑尽可能地设置好集合对象的初始大小,这将大大提高代码的性能。
      比如,Hashtable缺省的初始大小为101,载入因子为0.75,即如果其中的元素个数超过75个,它就必须增加大小并重新组织元素,所以,如果你 知道在创建一个新的Hashtable对象时就知道元素的确切数目如为110,那么,就应将其初始大小设为110/0.75=148,这样,就可以避免重 新组织内存并增加大小。
    展开全文
  • ArrayList 和Vector区别

    2021-04-08 23:02:16
    ArrayList:线程不安全,效率高,常用 Vector:线程安全的,效率低 jdk1.0就出现了 我们看Vector的源码:synchronized加锁处理 同步方法

    ArrayList:线程不安全,效率高,常用
    Vector:线程安全的,效率低 jdk1.0就出现了
    我们看Vector的源码:synchronized加锁处理 同步方法

    在这里插入图片描述

    展开全文
  • 最近在看JDK源码,现在从源码角度分析下ArrayList和Vector区别 注:本文源码基于JDK1.6 1.构造器  先从构造器入手在适合不过  ArrayList有三个构造器: public ArrayList(int ...

    最近在看JDK源码,现在从源码角度分析下ArrayList和Vector区别


    注:本文源码基于JDK1.6

    1.构造器

       先从构造器入手在适合不过

       ArrayList有三个构造器:

    1. public ArrayList(int initialCapacity)//构造一个具有指定初始容量的空列表。  
    2. public ArrayList()//构造一个初始容量为10的空列表。  
    3. public ArrayList(Collection<? extends E> c)//构造一个包含指定 collection 的元素的列表 
       Vector有四个构造方法:

    1. public Vector()//使用指定的初始容量和等于零的容量增量构造一个空向量。  
    2. public Vector(int initialCapacity)//构造一个空向量,使其内部数据数组的大小,其标准容量增量为零。  
    3. public Vector(Collection<? extends E> c)//构造一个包含指定 collection 中的元素的向量  
    4. public Vector(int initialCapacity,int capacityIncrement)//使用指定的初始容量和容量增量构造一个空的向量 
    总结:Vector比Arraylist多一个构造方法,没错就是public Vector(int initialCapacity,int capacityIncrement)这个构造方法,
             capacityIncrement就是容量增长,即前面所说的增长因子,ArrayList中是没有的

    2.Add方法

    ArrayList:

    public void ensureCapacity(int minCapacity) {
        modCount++;
        int oldCapacity = elementData.length;
        if (minCapacity > oldCapacity) {
            Object oldData[] = elementData;
            int newCapacity = (oldCapacity * 3)/2 + 1;
                if (newCapacity < minCapacity)
            newCapacity = minCapacity;
                // minCapacity is usually close to size, so this is a win:
                elementData = Arrays.copyOf(elementData, newCapacity);
        }
        }


    vector:

     private void ensureCapacityHelper(int minCapacity) {
        int oldCapacity = elementData.length;
        if (minCapacity > oldCapacity) {
            Object[] oldData = elementData;
            int newCapacity = (capacityIncrement > 0) ?
            (oldCapacity + capacityIncrement) : (oldCapacity * 2);
                if (newCapacity < minCapacity) {
            newCapacity = minCapacity;
            }
                elementData = Arrays.copyOf(elementData, newCapacity);
        }
        }

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


    3.线程安全

    vector中很多方法都是用关键字synchronized修饰而ArrayList则没有

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


    4.成员变量

    ArrayList:

    private transient Object[] elementData;

    vector:

    protected Object[] elementData;


    总结:ArrayList和vector内部都是通过数组实现,但ArrayList是私有的不可序列化


    展开全文
  • ArrayList和Vector区别以及其扩容机制

    千次阅读 2017-01-09 15:40:24
    ArrayList和Vector区别以及其扩容机制 相同点:  1、ArrayList和Vector都是继承了相同的父类和实现了相同的接口  (extends AbstractList implements List, Cloneable, Serializable, RandomAccess)  2、底层都...
  • Java中VectorArrayList区别详解 ...首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayListVector和LinkedList。List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。...
  • ArrayList在内存不够时默认是扩展50% + 1个,Vector是默认扩展1倍。 Vector提供indexOf(obj, start)接口,ArrayList没有。 Vector属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统...
  • 1、ArrayList是实现了基于动态数组的数据结构,LinkedList是实现了基于链表的数据结构。 2、ArrayList使用时需要在堆中开辟连续完整的内存空间,所以可以如果进行增删操作会造成内存搬移,效率低下,但是可以通过...
  • ArrayList和Vector功能类似。 整体上ArrayList是Vector的“裸奔新版”Vector从Java 1.0起就存在,ArrayList从Java 1.2起才存在,较新。 所以Vector在JavaME、Card等各种微小版本都可以使用, 而ArrayList不能...
  • Vector类的所有方法都是同步的,可以由两个线程安全的访问一个Vector对象、但是一个线程访问Vector的话代码要在同步操作上浪费大量的时间。 ArrayList不是同步的,所以在不需要保证线程安全时建议使用ArrayList。 ....
  • 1 下面是关于 两者详细讲解,这位老师讲的非常好,我就直接引用了 ArrayList 讲解: http://www.cnblogs.com/skywang12345/p/3308556.html Vector 讲解 :...2区别:  1:Array:List是线程不安全的,Vector
  • HashMapHashTable区别 HashTable:线程同步(线程安全) HashMap:线程异步(线程不安全) 同步:低效率、高安全
  • 分析源码我们发现,List接口继承自...其中ArrayList和Vector很相似,都是使用Object[] array数组来存储的。其中的方法也差不多。 如下所示: public interface List extends Collection { ……..}
  • ArrayList HashMap 是java2时才提供的, 他们是线程不安全的。  2.数据增长:  Vector增长原来的两倍,ArrayList增加原来的0.5倍。 转载于:...
  • ArrayList和Vector区别

    2019-07-15 19:39:03
    ArrayList 和Vector区别 ArrayList: 1.可以理解为可变数组 2.可以存储null 3.下标位置有序,内容无序 4.线程异步,不安全,速度快 Vector: 1.用法跟ArrayList一样 2.实现自List接口 3.可以存储null 4.下标有序,内容无序...
  • ArrayList Vector区别和常用方法
  • ArrayListVector 区别

    2020-11-29 15:23:53
    ArrayList和Vector在很多时候都很类似。 (1)两者都是基于索引的,内部由一个数组支持。 (2)两者维护插入的顺序,我们可以根据插入顺序来获取元素。 (3)ArrayList和Vector的迭代器实现都是fail-fast的。 (4)...
  • 相同点:1、ArrayList和Vector都是继承了相同的父类和实现了相同的接口2、底层都是数组实现的3、初始默认长度都为10。不同点:1、同步性:Vector中的public方法多数添加了synchronized关键字,以确保方法同步,也即...
  • ArrayList Vector区别

    千次阅读 2019-05-06 10:19:33
    ArrayList Vector区别是什么? Vector 的方法都是同步的,线程安全;ArrayList 非线程安全,但性能比Vector好 默认初始化容量都是10,Vector 扩容默认会翻倍,可指定扩容的大小;ArrayList只增加 50% ...
  • ArrayList和Vector区别

    2020-08-29 02:16:52
    ArrayList和Vector
  • 主要介绍了java ArrayList和Vector区别详解的相关资料,并附简单实例代码,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,032
精华内容 1,612
关键字:

arraylist和vector区别