Vector(使用数组实现,线程同步)

Posted mr-ranx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vector(使用数组实现,线程同步)相关的知识,希望对你有一定的参考价值。

Vector与ArrayList集合一样,内部使用数组实现,不过它是线程同步的,同步的代码:

public Enumeration<E> elements() 
        return new Enumeration<E>() 
            int count = 0;
            public boolean hasMoreElements() 
                return count < elementCount;
            
            public E nextElement() 
                synchronized (Vector.this) 
                    if (count < elementCount) 
                        return elementData(count++);
                    
                
                throw new NoSuchElementException("Vector Enumeration");
            
        ;
    

 

同一时刻只能有一个线程能够编辑Vector,避免了多线程同时写不会出现我在ArrayList集合中所说的数组越界现象,但是同步需要花费较多的时间,所以增删的速度就慢,通过源码可以发现Vector在容量不够的时候,它默认扩展一倍的容量,扩容源码如下:

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);
    

 

以上是关于Vector(使用数组实现,线程同步)的主要内容,如果未能解决你的问题,请参考以下文章

Vector容器简介

List单列集合

arraylistvectorlinkedList的区别

浅谈Vector

ArrayList和Vector的区别?

java集合